Skip to content

Configuration

Configuration Reference

Overview

M2M Protocol can be configured via:

  1. Configuration file (~/.m2m/config.toml)
  2. Environment variables
  3. Command-line arguments

Priority: CLI > Environment > Config File > Defaults

Configuration File

Default location: ~/.m2m/config.toml

Complete Example

# M2M Protocol Configuration
[proxy]
# Address to listen on
listen = "127.0.0.1:8080"
# Upstream LLM API endpoint
upstream = "http://localhost:11434/v1"
# API key for upstream (optional)
api_key = ""
# Request timeout in seconds
timeout = 30
[proxy.compression]
# Compress outgoing requests
requests = true
# Compress incoming responses
responses = true
# Preferred algorithm (token, brotli, auto)
algorithm = "auto"
[security]
# Enable security scanning
enabled = true
# Block unsafe content (vs just logging)
blocking = true
# Confidence threshold (0.0 - 1.0)
threshold = 0.8
[compression]
# Use ML model for algorithm routing
ml_routing = false
# Minimum size for Brotli (bytes)
brotli_threshold = 4096
# Prefer token compression for API payloads
prefer_token_for_api = true
[logging]
# Log level: trace, debug, info, warn, error
level = "info"
# JSON format for structured logging
json = false

Environment Variables

VariableDescriptionDefault
M2M_SERVER_PORTProxy listen port8080
M2M_SERVER_HOSTProxy listen address127.0.0.1
M2M_UPSTREAM_URLUpstream API URL-
M2M_API_KEYAPI key for upstream-
M2M_SECURITY_ENABLEDEnable security scanningtrue
M2M_SECURITY_BLOCKINGBlock unsafe contenttrue
M2M_BLOCK_THRESHOLDSecurity confidence threshold0.8
M2M_LOG_LEVELLogging levelinfo
M2M_LOG_JSONJSON log formatfalse
M2M_TIMEOUTRequest timeout (seconds)30

CLI Arguments

Server Command

Terminal window
m2m server [OPTIONS]
Options:
-p, --port <PORT> Listen port [default: 8080]
-h, --host <HOST> Listen address [default: 127.0.0.1]
-u, --upstream <URL> Upstream API URL [required]
-k, --api-key <KEY> API key for upstream
--security Enable security scanning
--threshold <FLOAT> Security threshold [default: 0.8]
--timeout <SECONDS> Request timeout [default: 30]
--log-level <LEVEL> Log level [default: info]
--log-json JSON log format

Compress Command

Terminal window
m2m compress [OPTIONS] <CONTENT>
Arguments:
<CONTENT> Content to compress (or - for stdin)
Options:
-a, --algorithm <ALG> Algorithm (token, brotli, auto) [default: auto]
-o, --output <FILE> Output file (default: stdout)

Decompress Command

Terminal window
m2m decompress [OPTIONS] <CONTENT>
Arguments:
<CONTENT> Content to decompress (or - for stdin)
Options:
-o, --output <FILE> Output file (default: stdout)

Scan Command

Terminal window
m2m scan [OPTIONS] <CONTENT>
Arguments:
<CONTENT> Content to scan
Options:
-t, --threshold <FLOAT> Confidence threshold [default: 0.8]
--json JSON output format

Proxy Configuration Details

Listen Address

[proxy]
listen = "127.0.0.1:8080" # Local only
listen = "0.0.0.0:8080" # All interfaces (caution!)

Upstream Configuration

[proxy]
# Local Ollama
upstream = "http://localhost:11434/v1"
# OpenAI
upstream = "https://api.openai.com/v1"
api_key = "sk-..."
# Azure OpenAI
upstream = "https://YOUR-RESOURCE.openai.azure.com/openai/deployments/YOUR-DEPLOYMENT"
api_key = "..."

Security Configuration

Scanning Modes

ModeenabledblockingBehavior
Disabledfalse-No scanning
MonitortruefalseScan and log, allow all
BlockingtruetrueScan and reject threats

Threshold Tuning

ThresholdFalse PositivesFalse Negatives
0.5HighLow
0.8MediumMedium
0.95LowHigh

Compression Configuration

Algorithm Selection

SettingDescription
autoAutomatically select best algorithm
tokenAlways use token compression
brotliAlways use Brotli compression
noneDisable compression

Size Thresholds

[compression]
# Minimum content size for compression (bytes)
min_size = 100
# Use Brotli above this size (bytes)
brotli_threshold = 4096
# Maximum content size (bytes)
max_size = 16777216

Logging Configuration

Log Levels

LevelDescription
traceVery detailed debugging
debugDebugging information
infoNormal operation
warnWarning conditions
errorError conditions

JSON Logging

[logging]
json = true

Output:

{"timestamp":"2026-01-17T12:00:00Z","level":"INFO","message":"Request compressed","algorithm":"token","ratio":0.66}