ExMCP.Transport.SecurityGuard (ex_mcp v0.10.0)

View Source

Transport-layer security interceptor that enforces MCP security policies.

This module provides consistent security enforcement across all transports by intercepting outbound requests and applying token passthrough prevention and user consent validation.

Summary

Functions

Gets the security configuration, merging provided config with defaults.

Validates a request against security policies.

Types

request()

@type request() :: %{
  url: String.t(),
  headers: [{String.t(), String.t()}],
  method: String.t(),
  transport: atom(),
  user_id: String.t()
}

security_result()

@type security_result() ::
  {:ok, sanitized_request :: map()} | {:error, security_violation :: map()}

Functions

get_security_config(config \\ %{})

@spec get_security_config(map()) :: map()

Gets the security configuration, merging provided config with defaults.

validate_request(request, config \\ %{})

@spec validate_request(request(), map()) :: security_result()

Validates a request against security policies.

This function enforces both token passthrough prevention and user consent validation for external resource access.

Parameters

  • request - Standardized request structure
  • config - Security configuration (optional, uses defaults if not provided)

Returns

  • {:ok, sanitized_request} - Request is allowed with potentially sanitized headers
  • {:error, security_violation} - Request blocked by security policy

Examples

request = %{
  url: "https://api.example.com/data",
  headers: [{"Authorization", "Bearer token"}],
  method: "GET",
  transport: :http,
  user_id: "user123"
}

case SecurityGuard.validate_request(request, config) do
  {:ok, sanitized_request} ->
    # Proceed with sanitized request
    perform_request(sanitized_request)

  {:error, violation} ->
    # Handle security violation
    {:error, violation}
end