ExMCP.Content.Validation (ex_mcp v0.10.0)
View SourceContent 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
@type sanitization_op() :: :html_escape | :strip_scripts | :normalize_unicode | :limit_size | :remove_metadata | :compress_media | atom()
Sanitization operation
@type transformation_op() :: :normalize_whitespace | :convert_encoding | :compress_images | :resize_images | :extract_text | :generate_thumbnails | atom()
Transformation operation
@type validation_error() :: %{ rule: atom(), message: String.t(), field: String.t() | nil, value: any(), severity: :error | :warning | :info }
Validation error with context
@type validation_opts() :: [ strict: boolean(), max_errors: pos_integer(), skip_warnings: boolean(), custom_validators: [module()] ]
Validation options
@type validation_result() :: :ok | {:error, [validation_error()]}
Validation result with detailed errors
@type validation_rule() :: atom() | {atom(), keyword()} | {module(), atom(), keyword()} | (ExMCP.Content.Protocol.content() -> :ok | {:error, String.t()})
Validation rule specification
Functions
@spec analyze(ExMCP.Content.Protocol.content(), [atom()]) :: map()
Analyzes content for various properties and metadata.
@spec custom_rule((ExMCP.Content.Protocol.content() -> :ok | {:error, String.t()})) :: validation_rule()
Creates a validation rule from a custom function.
@spec detect_sensitive_data(ExMCP.Content.Protocol.content()) :: :ok | {:sensitive, [atom()]}
Checks if content contains potentially sensitive information.
@spec extract_metadata(ExMCP.Content.Protocol.content()) :: map()
Extracts metadata from content.
@spec register_validator(atom(), (ExMCP.Content.Protocol.content() -> validation_result())) :: :ok
Registers a custom validator function.
@spec sanitize(ExMCP.Content.Protocol.content(), [sanitization_op()]) :: ExMCP.Content.Protocol.content()
Sanitizes content to remove potentially dangerous or unwanted elements.
@spec sanitize_text(String.t(), [sanitization_op()]) :: String.t()
Sanitizes text content specifically for safe display.
@spec scan_security(ExMCP.Content.Protocol.content(), [atom()]) :: :safe | {:threat, [String.t()]}
Scans content for security threats.
@spec transform(ExMCP.Content.Protocol.content(), [transformation_op()]) :: {:ok, ExMCP.Content.Protocol.content() | [ExMCP.Content.Protocol.content()]} | {:error, String.t()}
Transforms content through a series of 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.
@spec validate( ExMCP.Content.Protocol.content(), [validation_rule()], validation_opts() ) :: validation_result()
Validates content against a set of validation rules.
@spec validate_batch( [ExMCP.Content.Protocol.content()], [validation_rule()], validation_opts() ) :: :ok | {:error, [validation_result()]}
Validates multiple content items efficiently using parallel processing.
@spec validate_schema(ExMCP.Content.Protocol.content(), map()) :: :ok | {:error, [String.t()]}
Validates content against a JSON schema.