FastMCP (Python)

This documentation explains how to protect your FastMCP application thanks to the usage of the Python ASGI module.

Prerequisites

  • The FastMCP server must be accessible over HTTP
  • The FastMCP version must be higher or equal than 2.3.2 to use custom middleware

Installation

The module can be installed with pip:

pip install datadome-asgi

Usage

Add the Python ASGI middleware as a custom middleware for your MCP application.

from fastmcp import FastMCP
from starlette.middleware import Middleware
from datadome_asgi import DataDomeMiddleware

# Create FastMCP application
mcp = FastMCP()

# Define the list of Middleware
middleware = [
    Middleware(
        DataDomeMiddleware,
        server_side_key="YOUR_SERVER_SIDE_KEY",
    )
]

# Use MCP server over HTTP
app = mcp.http_app(middleware=middleware)

Your MCP server is now protected with DataDome!

Settings

SettingDescriptionDefault value
server_side_keyYou DataDome server-side key.
appThe ASGI application the middleware needs to be attached to.
url_pattern_exclusionRegex to match to exclude requests from being processed with the Protection API.r"\.(avi|avif|bmp|css|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|json|less|map|mka|mkv|mov|mp3|mp4|mpeg|mpg|ogg|ogm|opus|otf|png|svg|svgz|swf|tiff|ttf|wav|webm|webp|woff|woff2|xml|zip)$"
url_pattern_inclusionRegex to match to process the request with the Protection API.""
endpoint_hostHost of the Protection API.api.datadome.co
timeoutThe timeout limit for requests sent to the Protection API, in milliseconds.150
enable_mcp_supportBoolean to enable Model Context Protocol support.false

Here is an example of configuration with default values that you can modify according to your needs:

from fastmcp import FastMCP
from starlette.middleware import Middleware
from datadome_asgi import DataDomeMiddleware

# Create FastMCP application
mcp = FastMCP()

# Define the list of Middleware
middleware = [
    Middleware(
        DataDomeMiddleware,
      	server_side_key="YOUR_SERVER_SIDE_KEY",
				urlPatternExclusion=r"\.(avi|avif|bmp|css|eot|flac|flv|gif|gz|ico|jpeg|jpg|js|json|less|map|mka|mkv|mov|mp3|mp4|mpeg|mpg|ogg|ogm|opus|otf|png|svg|svgz|swf|tiff|ttf|wav|webm|webp|woff|woff2|xml|zip)$",
  		  urlPatternInclusion="",
		    endpoint_host="api.datadome.co",
    		timeout=150,
		    enable_mcp_support=False,
    )
]

# Use MCP server over HTTP
app = mcp.http_app(middleware=middleware)