Provides AI-powered API discovery and management platform for registering, cataloging, and executing calls to external APIs through Databricks, with support for SQL warehouse queries and Delta table storage of API metadata.
Supports bearer token authentication for accessing GitHub API endpoints, enabling registration and management of GitHub API calls.
Supports bearer token authentication for accessing Shopify API endpoints, enabling registration and management of Shopify API calls.
Supports bearer token authentication for accessing Stripe API endpoints, enabling registration and management of Stripe API calls.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@API Registry MCP Serverregister the Stripe API with my production key"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π Dataverse MCP Server
A Model Context Protocol (MCP) server for Microsoft Dataverse, enabling AI assistants like Claude to interact with Dataverse data through natural language.
Built on: Model Context Protocol | Microsoft Dataverse MCP Spec
What is This?
This MCP server exposes Microsoft Dataverse tables and records through the Model Context Protocol, allowing AI assistants to:
π List and explore Dataverse tables (entities)
π Query records with OData filters and sorting
βοΈ Create new records in any table
π Update existing records by GUID
π€ Natural language interface via Claude Desktop, VS Code, or any MCP client
Quick Start
1. Prerequisites
Python 3.11+
Dataverse environment with API access
Azure AD app registration with Dataverse permissions
2. Install
# Install dependencies
pip install fastapi uvicorn requests python-dotenv fastmcp
# Or with uv (recommended)
uv pip install fastapi uvicorn requests python-dotenv fastmcp3. Configure
Run the setup script:
chmod +x setup_dataverse.sh
./setup_dataverse.shOr manually create .env.local:
DATAVERSE_HOST=https://org1bfe9c69.api.crm.dynamics.com
DATAVERSE_TENANT_ID=your-tenant-id
DATAVERSE_CLIENT_ID=your-client-id
DATAVERSE_CLIENT_SECRET=your-client-secret4. Test Connection
python test_dataverse.pyExpected output: β
All tests passed! Dataverse MCP server is ready.
5. Start Server
Option A: Run Locally
./watch.sh
# Or: uvicorn server.app:combined_app --reload --port 8000Option B: Deploy to Databricks Apps
./deploy.sh --createπ See DATABRICKS_DEPLOYMENT.md for deployment guide.
Server endpoints:
π§ MCP:
http://localhost:8000/mcp(local) orhttps://your-app.databricksapps.com/apps/your-app/mcp(cloud)π Docs:
http://localhost:8000/docsβ€οΈ Health:
http://localhost:8000/api/health
Documentation
Document | Description |
5-minute quick start guide | |
Detailed Azure AD & Dataverse setup | |
Deploy to Databricks Apps | |
Complete reference documentation |
Available MCP Tools
Phase 1 (Implemented)
Tool | Description |
| Server health check |
| List all Dataverse tables |
| Get table schema and columns |
| Query records with OData filters |
| Create new records |
| Update existing records |
Phase 2 (Planned)
delete_record- Delete recordscreate_table/update_table/delete_table- Table managementlist_knowledge_sources/retrieve_knowledge- Copilot Studio integrationlist_prompts/execute_prompt- Custom prompts
Usage Examples
Claude Desktop
Configure ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"dataverse": {
"url": "http://localhost:8000/mcp"
}
}
}Then in Claude:
You: "List all custom tables in my Dataverse environment"
Claude: [Calls list_tables with custom_only=True]
You: "Show me accounts with revenue over $1M"
Claude: [Calls read_query with filter]
You: "Create a new account called Fabrikam with $2M revenue"
Claude: [Calls create_record]cURL
# List tables
curl -X POST http://localhost:8000/mcp/call-tool \
-H "Content-Type: application/json" \
-d '{"name": "list_tables", "arguments": {"top": 10}}'
# Query accounts
curl -X POST http://localhost:8000/mcp/call-tool \
-H "Content-Type: application/json" \
-d '{
"name": "read_query",
"arguments": {
"table_name": "account",
"select": ["name", "revenue"],
"filter_query": "revenue gt 1000000",
"top": 10
}
}'Python
import requests
response = requests.post('http://localhost:8000/mcp/call-tool', json={
"name": "describe_table",
"arguments": {"table_name": "account"}
})
print(response.json())Project Structure
dataverse_mcp_server/
βββ server/
β βββ app.py # FastAPI + MCP server
β βββ dataverse_tools.py # MCP tool implementations
β βββ dataverse/
β β βββ auth.py # OAuth authentication
β β βββ client.py # Dataverse Web API client
β β βββ __init__.py
β βββ routers/ # FastAPI REST endpoints
β βββ health.py # Health check
β βββ mcp_info.py # MCP metadata
β βββ user.py # User info
βββ client/ # React frontend (future)
βββ test_dataverse.py # Connection tests
βββ setup_dataverse.sh # Interactive setup
βββ watch.sh # Dev server with hot reload
βββ config.yaml # MCP server config
βββ env.example # Environment template
βββ DATAVERSE_QUICKSTART.md # Quick start guide
βββ DATAVERSE_SETUP.md # Detailed setup
βββ README_DATAVERSE.md # Full referenceArchitecture
Authentication: Service Principal (OAuth 2.0 client credentials flow)
API: Dataverse Web API v9.2
Protocol: Model Context Protocol (MCP)
Framework: FastAPI + FastMCP
MCP Clients (Claude, VS Code)
β HTTP/MCP
Dataverse MCP Server (FastAPI)
β HTTPS/OAuth
Microsoft DataverseTroubleshooting
Problem | Solution |
401 Authentication Error | Check client secret validity and API permissions |
403 Permission Denied | Assign security role to app user in Power Platform Admin Center |
Table Not Found | Use |
Connection Timeout | Verify |
See DATAVERSE_SETUP.md for detailed troubleshooting.
Development
# Run tests
python test_dataverse.py
# Start dev server
./watch.sh
# Check lints
ruff check server/
# Format code
ruff format server/Reference Links
License
See LICENSE.md
Security
Report vulnerabilities via SECURITY.md
Questions? See DATAVERSE_QUICKSTART.md or DATAVERSE_SETUP.md
Built with β€οΈ for the Dataverse and MCP communities