Crownpeak DQM MCP Server
A portable Model Context Protocol (MCP) server that wraps the Crownpeak DQM CMS REST API. This server exposes agent-friendly tools for quality checking, asset management, checkpoint monitoring, and more.
Features
Complete API Coverage: All 15 DQM API endpoints implemented and tested
Dual Transport Support: Run as stdio (desktop clients) or HTTP server (cloud hosting)
Production Ready: TypeScript, error handling, rate limiting, request timeouts
Docker Native: Containerized deployment with health checks
Portable: Deploy anywhere - AWS, Azure, GCP, Netlify, Vercel, Fly.io, Kubernetes
Safe by Default: Read-only operations by default, destructive tools behind feature flag
Agent Optimized: Task-oriented tools designed for AI agents
Fully Tested: 100% integration test coverage against live DQM API
Quick Start
Prerequisites
Node.js 20+
npm (included with Node.js)
Crownpeak DQM API key
Installation
Build
Usage
Local Stdio Mode (Desktop Clients)
For use with desktop MCP clients like Claude Desktop:
Claude Desktop Configuration
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Claude Desktop Usage Examples
Once configured, you can use natural language to interact with the DQM API through Claude:
Example 1: Quality Check a Website
Claude will:
Use
run_quality_checkwith your website ID and the URLCreate an asset in DQM
Retrieve and display all quality issues found
Example 2: Check Spelling on a Page
Claude will:
Use
spellcheck_assetto check the URLReport any misspellings found
Example 3: Review Quality Issues
Claude will:
List your websites with
list_websitesList checkpoints with
list_checkpointsRun a quality check on your homepage
Present a detailed report
Example 4: Asset Management
Claude will:
Search assets with
search_assetsGet issues for each with
get_asset_issuesSort and present the results
Example 5: Get Highlighted Content
Claude will:
Use
get_asset_pagehighlightto get highlighted HTMLDisplay the content with issues marked
HTTP Server Mode (Cloud Hosting)
For remote hosting and API access:
Test endpoints:
Docker Deployment
Using Docker Compose (Recommended)
Using Docker Directly
Cloud Deployment
AWS
AWS ECS/Fargate
AWS App Runner
Azure
Azure Container Instances
Azure Container Apps
GCP
Cloud Run
GKE (Kubernetes)
Vercel
Create vercel.json:
Deploy:
Netlify
Create netlify.toml:
Create serverless function wrapper in netlify/functions/server.ts.
Fly.io
Create fly.toml:
Deploy:
Available Tools
Discovery
list_websites: List all websites in your DQM account
get_website: Get details of a specific website
Checkpoints (Quality Rules)
list_checkpoints: List all quality checkpoints, optionally filtered by website
get_checkpoint: Get details of a specific checkpoint
Assets (Scanned Pages)
search_assets: Search for assets with optional filters
get_asset: Get details of a specific asset
get_asset_status: Check the status of an asset scan
get_asset_issues: Get all quality issues for an asset
get_asset_content: Get the HTML content for an asset
get_asset_errors: Get asset errors for a specific checkpoint with highlighted content
get_asset_pagehighlight: (Beta) Get asset content with all page highlightable issues highlighted
update_asset: Update the content of an existing asset
delete_asset: Delete a specific asset from DQM storage
Quality Checking
run_quality_check: Run a quality check on a URL or HTML content
Accepts:
websiteId,url(optional),html(optional),metadata(optional)Creates asset, returns issues immediately
Rate limited to prevent overload
Spellcheck
spellcheck_asset: Run spellcheck on an asset
Accepts:
assetId,websiteId,url,html,language(optional)Can use existing asset or create new one automatically
Configuration
All configuration via environment variables. See .env.example for all options.
Required
DQM_API_KEY: Your Crownpeak DQM API key
Optional
DQM_API_BASE_URL: Override base URL (default:https://api.crownpeak.net/dqm-cms/v1)PORT: HTTP server port (default:3000)ENABLE_DESTRUCTIVE_TOOLS: Enable delete operations (default:false)DQM_REQUEST_TIMEOUT: Request timeout in ms (default:30000)MAX_CONCURRENT_QUALITY_CHECKS: Concurrent quality check limit (default:3)
Testing Configuration
DQM_WEBSITE_ID: Website ID for integration testsDQM_TEST_URL: URL to test against (default:https://www.crownpeak.com)
Development
Run in Development Mode
Run Tests
The integration test suite validates all 15 API endpoints against the live DQM API with 100% test coverage.
Linting
Type Checking
Architecture
API Client Features
Automatic dual authentication (x-api-key header + query parameter)
Request timeouts
Error handling with structured errors
Rate limiting for quality checks
Issue normalization
Proper handling of text/HTML and JSON responses
Support for form-encoded POST/PUT requests
Security
API keys loaded from environment (never hardcoded)
Non-root Docker user
Read-only operations by default
Request timeouts prevent hanging
Rate limiting prevents abuse
Comprehensive error handling (no secret leakage)
Troubleshooting
"DQM_API_KEY environment variable is required"
Set your API key in .env or pass it directly:
Connection timeouts
Increase timeout:
Docker health check fails
Ensure the container is running and port 3000 is accessible:
Integration tests fail
Make sure you have set up the test configuration in .env:
Legal Notices
This is an example solution subject to the MIT license.
Disclaimer
This document is provided for information purposes only. Paul Taylor may change the contents hereof without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. Paul Taylor specifically disclaims any liability with respect to this document and no contractual obligations are formed either directly or indirectly by this document. The technologies, functionality, services, and processes described herein are subject to change without notice.