Dataverse MCP Chatbot
A lightweight HTTP wrapper around a Model Context Protocol (MCP) server for Microsoft Power Platform/Dataverse. This project exposes a set of tools via a /invoke
REST endpoint and includes a simple HTML chatbot UI that accepts natural-language queries and dynamically routes them to the appropriate MCP tool.
Features
MCP Tools: Supports 8 core MCP operations:
use-powerplatform-prompt
— Entity overview, attribute details, query templates, relationship mapsget-entity-metadata
— Fetch metadata for an entityget-entity-attributes
— List all attributes of an entityget-entity-attribute
— Retrieve a specific attribute definitionget-entity-relationships
— One-to-many and many-to-many relationshipsget-global-option-set
— Global option set definitionsget-record
— Fetch a record by GUIDquery-records
— OData-filtered record queries
Natural-Language Front End: HTML + JavaScript UI that parses free-text questions and invokes the correct MCP tool.
Environment Configuration: Uses environment variables for all Power Platform credentials.
Express + CORS: Simple HTTP server for integration with any front-end.
Prerequisites
Node.js >= 16.x
A Dataverse / Power Platform environment and service principal (app registration) with:
- Tenant ID
- Client (Application) ID
- Client Secret
- Organization URL (e.g.
https://<yourorg>.crm.dynamics.com
)
Installation
Clone the repository
git clone https://github.com/your-org/powerplatform-mcp-chatbot.git cd powerplatform-mcp-chatbot
Install dependencies
npm install
Build the TypeScript
npm run build
Configuration
Create a .env
file in the project root (or set environment variables in your shell) with:
POWERPLATFORM_URL=https://yourorg.crm.dynamics.com
POWERPLATFORM_CLIENT_ID=your-client-id
POWERPLATFORM_CLIENT_SECRET=your-client-secret
POWERPLATFORM_TENANT_ID=your-tenant-id
PORT=3000 # Optional: HTTP server port
Note: Ensure these values are kept secure and not committed to version control.
Running the Server
After building, start the HTTP wrapper:
node dist/server.js
You should see:
✅ PowerPlatform MCP HTTP server running at http://localhost:3000/invoke
REST Invoke Endpoint
All MCP tools are exposed via a single POST endpoint:
POST http://localhost:3000/invoke
Content-Type: application/json
{
"tool": "tool-name",
"parameters": { /* tool-specific parameters */ }
}
Sample Requests
Entity Overview
curl -X POST http://localhost:3000/invoke \ -H 'Content-Type: application/json' \ -d '{"tool":"use-powerplatform-prompt","parameters":{"promptType":"ENTITY_OVERVIEW","entityName":"account"}}'
Get Entity Metadata
curl -X POST http://localhost:3000/invoke \ -d '{"tool":"get-entity-metadata","parameters":{"entityName":"contact"}}'
Query Records
curl -X POST http://localhost:3000/invoke \ -d '{"tool":"query-records","parameters":{"entityNamePlural":"contacts","filter":"statecode eq 0","maxRecords":10}}'
Refer to the full tool list above for parameter details.
HTML Chatbot UI
A demo front-end is provided in chatbot.html
. It listens for natural-language queries, maps them to the correct tool, and displays results inline.
Serve
chatbot.html
(e.g., open directly in Chrome or host via any static server).Ask questions such as:
- “Tell me about the Account entity”
- “List fields in Lead”
- “Details of field revenue on Account”
- “Find active contacts where statecode eq 0”
Troubleshooting
- CORS Errors: Ensure you run the HTML from a local or hosted file with CORS enabled (the server uses
cors()
by default). - Authentication: Verify your service principal has Dataverse API permissions and the environment URL is correct.
- Errors: Check console output from
server.js
for stack traces and error messages.