ExMCP.Content.Validation (ex_mcp v0.9.2)

View Source

Content validation and transformation utilities for ExMCP.

Provides comprehensive validation, sanitization, and transformation capabilities for MCP content, ensuring data integrity and security.

Features

  • Schema Validation: JSON Schema and custom validation rules
  • Content Sanitization: HTML, SQL injection, and XSS protection
  • Size Limits: File size and content length validation
  • MIME Type Validation: Strict MIME type checking and detection
  • Content Transformation: Format conversion and normalization
  • Security Scanning: Malware detection and content analysis
  • Custom Validators: Extensible validation framework

Usage

alias ExMCP.Content.Validation

# Basic validation
case Validation.validate(content, rules) do
  :ok -> process_content(content)
  {:error, reasons} -> handle_validation_errors(reasons)
end

# Sanitization
safe_content = Validation.sanitize(content, [:html_escape, :strip_scripts])

# Security scanning
case Validation.scan_security(content, [:xss, :sql_injection]) do
  :safe -> process_content(content)
  {:threat, threats} -> reject_content(content)
end

Summary

Types

Sanitization operation

Transformation operation

Validation error with context

Validation options

Validation result with detailed errors

Validation rule specification

Functions

Analyzes content for various properties and metadata.

Creates a validation rule from a custom function.

Checks if content contains potentially sensitive information.

Extracts metadata from content.

Registers a custom validator function.

Sanitizes content to remove potentially dangerous or unwanted elements.

Sanitizes text content specifically for safe display.

Scans content for security threats.

Transforms content through a series of operations.

Transforms content with validation at each step.

Validates content against a set of validation rules.

Validates multiple content items efficiently using parallel processing.

Validates content against a JSON schema.

Types

sanitization_op()

@type sanitization_op() ::
  :html_escape
  | :strip_scripts
  | :normalize_unicode
  | :limit_size
  | :remove_metadata
  | :compress_media
  | atom()

Sanitization operation

transformation_op()

@type transformation_op() ::
  :normalize_whitespace
  | :convert_encoding
  | :compress_images
  | :resize_images
  | :extract_text
  | :generate_thumbnails
  | atom()

Transformation operation

validation_error()

@type validation_error() :: %{
  rule: atom(),
  message: String.t(),
  field: String.t() | nil,
  value: any(),
  severity: :error | :warning | :info
}

Validation error with context

validation_opts()

@type validation_opts() :: [
  strict: boolean(),
  max_errors: pos_integer(),
  skip_warnings: boolean(),
  custom_validators: [module()]
]

Validation options

validation_result()

@type validation_result() :: :ok | {:error, [validation_error()]}

Validation result with detailed errors

validation_rule()

@type validation_rule() ::
  atom()
  | {atom(), keyword()}
  | {module(), atom(), keyword()}
  | (ExMCP.Content.Protocol.content() -> :ok | {:error, String.t()})

Validation rule specification

Functions

analyze(content, analysis_types)

@spec analyze(ExMCP.Content.Protocol.content(), [atom()]) :: map()

Analyzes content for various properties and metadata.

custom_rule(validator_fn)

@spec custom_rule((ExMCP.Content.Protocol.content() -> :ok | {:error, String.t()})) ::
  validation_rule()

Creates a validation rule from a custom function.

detect_sensitive_data(content)

@spec detect_sensitive_data(ExMCP.Content.Protocol.content()) ::
  :ok | {:sensitive, [atom()]}

Checks if content contains potentially sensitive information.

extract_metadata(content)

@spec extract_metadata(ExMCP.Content.Protocol.content()) :: map()

Extracts metadata from content.

register_validator(name, validator_fn)

@spec register_validator(atom(), (ExMCP.Content.Protocol.content() ->
                              validation_result())) :: :ok

Registers a custom validator function.

sanitize(content, operations)

Sanitizes content to remove potentially dangerous or unwanted elements.

sanitize_text(text, operations)

@spec sanitize_text(String.t(), [sanitization_op()]) :: String.t()

Sanitizes text content specifically for safe display.

scan_security(content, scan_types)

@spec scan_security(ExMCP.Content.Protocol.content(), [atom()]) ::
  :safe | {:threat, [String.t()]}

Scans content for security threats.

transform(content, operations)

Transforms content through a series of operations.

transform_with_validation(content, operations)

@spec transform_with_validation(ExMCP.Content.Protocol.content(), [
  transformation_op() | validation_rule()
]) :: {:ok, ExMCP.Content.Protocol.content()} | {:error, String.t()}

Transforms content with validation at each step.

validate(content, rules, opts \\ [])

Validates content against a set of validation rules.

validate_batch(contents, rules, opts \\ [])

@spec validate_batch(
  [ExMCP.Content.Protocol.content()],
  [validation_rule()],
  validation_opts()
) ::
  :ok | {:error, [validation_result()]}

Validates multiple content items efficiently using parallel processing.

validate_schema(content, schema)

@spec validate_schema(ExMCP.Content.Protocol.content(), map()) ::
  :ok | {:error, [String.t()]}

Validates content against a JSON schema.