AGNTCY · Schema

ServerConfig

AI AgentsInteroperabilitySpecificationOpen-SourceAgent DiscoveryIdentityAgent DirectoryMCPA2AOpenAPIgRPCProtocol BuffersVerifiable CredentialsSchemaTaxonomyMessagingObservabilityLinux Foundation

Properties

Name Type Description
auth object Auth for this receiver.
endpoint string Endpoint is the address to listen on. The transport protocol is inferred from the endpoint scheme: * `ws://`, `wss://` → WebSocket (TLS when `wss`) * `http://`, `https://`, bare `host:port` → gRPC
http2_only boolean Use HTTP 2 only.
keepalive object Keepalive anchor for all the settings related to keepalive.
max_concurrent_streams integernull MaxConcurrentStreams sets the limit on the number of concurrent streams to each ServerTransport.
max_frame_size integernull Maximum size (in MiB) of messages accepted by the server.
max_header_list_size integernull Max header list size
metadata object Arbitrary user-provided metadata.
read_buffer_size integernull ReadBufferSize for gRPC server.
tls object Configures the protocol to use TLS.
write_buffer_size integernull WriteBufferSize for gRPC server.
View JSON Schema on GitHub

JSON Schema

agntcy-slim-server-config.schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "ServerConfig",
  "type": "object",
  "properties": {
    "auth": {
      "description": "Auth for this receiver.",
      "$ref": "#/$defs/AuthenticationConfig",
      "default": {
        "type": "none"
      }
    },
    "endpoint": {
      "description": "Endpoint is the address to listen on.\n\nThe transport protocol is inferred from the endpoint scheme:\n* `ws://`, `wss://`  → WebSocket (TLS when `wss`)\n* `http://`, `https://`, bare `host:port` → gRPC",
      "type": "string"
    },
    "http2_only": {
      "description": "Use HTTP 2 only.",
      "type": "boolean",
      "default": true
    },
    "keepalive": {
      "description": "Keepalive anchor for all the settings related to keepalive.",
      "$ref": "#/$defs/KeepaliveServerParameters",
      "default": {
        "max_connection_age": "2h",
        "max_connection_age_grace": "5m",
        "max_connection_idle": "1h",
        "time": "2m",
        "timeout": "20s"
      }
    },
    "max_concurrent_streams": {
      "description": "MaxConcurrentStreams sets the limit on the number of concurrent streams to each ServerTransport.",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint32",
      "minimum": 0
    },
    "max_frame_size": {
      "description": "Maximum size (in MiB) of messages accepted by the server.",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint32",
      "minimum": 0
    },
    "max_header_list_size": {
      "description": "Max header list size",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint32",
      "minimum": 0
    },
    "metadata": {
      "description": "Arbitrary user-provided metadata.",
      "anyOf": [
        {
          "$ref": "#/$defs/MetadataMap"
        },
        {
          "type": "null"
        }
      ]
    },
    "read_buffer_size": {
      "description": "ReadBufferSize for gRPC server.",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint",
      "minimum": 0
    },
    "tls": {
      "description": "Configures the protocol to use TLS.",
      "$ref": "#/$defs/TlsServerConfig",
      "default": {
        "ca_source": {
          "type": "none"
        },
        "client_ca": {
          "type": "none"
        },
        "include_system_ca_certs_pool": true,
        "insecure": false,
        "reload_client_ca_file": false,
        "reload_interval": null,
        "source": {
          "type": "none"
        },
        "tls_version": "tls1.3"
      }
    },
    "write_buffer_size": {
      "description": "WriteBufferSize for gRPC server.",
      "type": [
        "integer",
        "null"
      ],
      "format": "uint",
      "minimum": 0
    }
  },
  "required": [
    "endpoint"
  ],
  "$defs": {
    "AlgorithmRepr": {
      "description": "Local enum used only for JSON Schema generation of the `algorithm` field.\nRemote schema representation of jsonwebtoken::Algorithm",
      "type": "string",
      "enum": [
        "HS256",
        "HS384",
        "HS512",
        "ES256",
        "ES384",
        "RS256",
        "RS384",
        "RS512",
        "PS256",
        "PS384",
        "PS512",
        "EdDSA"
      ]
    },
    "AuthenticationConfig": {
      "description": "Enum holding one configuration for the server.",
      "oneOf": [
        {
          "description": "Basic authentication configuration.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "basic"
            }
          },
          "$ref": "#/$defs/Config",
          "required": [
            "type"
          ]
        },
        {
          "description": "JWT authentication configuration.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "jwt"
            }
          },
          "$ref": "#/$defs/Config2",
          "required": [
            "type"
          ]
        },
        {
          "description": "SPIRE/SPIFFE authentication configuration.",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "spire"
            }
          },
          "$ref": "#/$defs/SpireConfig",
          "required": [
            "type"
          ]
        },
        {
          "description": "None",
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "none"
            }
          },
          "required": [
            "type"
          ]
        }
      ]
    },
    "CaSource": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "path": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "const": "file"
            }
          },
          "required": [
            "type",
            "path"
          ]
        },
        {
          "type": "object",
          "properties": {
            "data": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "const": "pem"
            }
          },
          "required": [
            "type",
            "data"
          ]
        },
        {
          "description": "SPIRE authentication configuration",
          "type": "object",
          "properties": {
            "jwt_audiences": {
              "description": "Audiences to request / verify for JWT SVIDs",
              "type": "array",
              "default": [
                "slim"
              ],
              "items": {
                "type": "string"
              }
            },
            "socket_path": {
              "description": "Path to the SPIFFE Workload API socket (None => use SPIFFE_ENDPOINT_SOCKET env var)",
              "type": [
                "string",
                "null"
              ]
            },
            "target_spiffe_id": {
              "description": "Optional target SPIFFE ID when requesting JWT SVIDs",
              "type": [
                "string",
                "null"
              ]
            },
            "trust_domains": {
              "description": "Optional trust domains override for X.509 bundle retrieval. If set,\n`get_x509_bundle()` uses this instead of deriving from the current SVID.",
              "type": "array",
              "default": [],
              "items": {
                "type": "string"
              }
            },
            "type": {
              "type": "string",
              "const": "spire"
            }
          },
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "none"
            }
          },
          "required": [
            "type"
          ]
        }
      ]
    },
    "Claims": {
      "type": "object",
      "properties": {
        "audience": {
          "description": "JWT audience",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          }
        },
        "custom_claims": {
          "anyOf": [
            {
              "$ref": "#/$defs/MetadataMap"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "issuer": {
          "description": "JWT Issuer",
          "type": [
            "string",
            "null"
          ]
        },
        "subject": {
          "description": "JWT Subject",
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "Config": {
      "type": "object",
      "properties": {
        "password": {
          "description": "The password for the username.",
          "$ref": "#/$defs/OpaqueString"
        },
        "username": {
          "description": "The username the client will use to authenticate.",
          "type": "string"
        }
      },
      "required": [
        "username",
        "password"
      ]
    },
    "Config2": {
      "type": "object",
      "properties": {
        "claims": {
          "description": "Claims",
          "$ref": "#/$defs/Claims",
          "default": {
            "audience": null,
            "custom_claims": null,
            "issuer": null,
            "subject": null
          }
        },
        "duration": {
          "description": "JWT Duration (will become exp: now() + duration)",
          "type": "string",
          "default": "1h"
        },
        "key": {
          "description": "One of: `encoding`, `decoding`, or `autoresolve`\nEncoding key is used for signing JWTs (client-side).\nDecoding key is used for verifying JWTs (server-side).\nAutoresolve is used to automatically resolve the key based on the claims.",
          "$ref": "#/$defs/JwtKey"
        }
      },
      "required": [
        "key"
      ]
    },
    "Duration": {
      "type": "object",
      "properties": {
        "nanos": {
          "type": "integer",
          "format": "uint32",
          "minimum": 0
        },
        "secs": {
          "type": "integer",
          "format": "uint64",
          "minimum": 0
        }
      },
      "required": [
        "secs",
        "nanos"
      ]
    },
    "JwtKey": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "encoding"
            }
          },
          "$ref": "#/$defs/Key",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "decoding"
            }
          },
          "$ref": "#/$defs/Key",
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "autoresolve"
            }
          },
          "required": [
            "type"
          ]
        }
      ]
    },
    "KeepaliveServerParameters": {
      "type": "object",
      "properties": {
        "max_connection_age": {
          "description": "max_connection_age sets the maximum amount of time a connection may exist before it will be closed.",
          "type": "string",
          "default": "2h"
        },
        "max_connection_age_grace": {
          "description": "max_connection_age_grace is an additional time given after MaxConnectionAge before closing the connection.",
          "type": "string",
          "default": "5m"
        },
        "max_connection_idle": {
          "description": "max_connection_idle sets the time after which an idle connection is closed.",
          "type": "string",
          "default": "1h"
        },
        "time": {
          "description": "Time sets the frequency of the keepalive ping.",
          "type": "string",
          "default": "2m"
        },
        "timeout": {
          "description": "Timeout sets the amount of time the server waits for a keepalive ping ack.",
          "type": "string",
          "default": "20s"
        }
      }
    },
    "Key": {
      "description": "Represents a key",
      "type": "object",
      "properties": {
        "algorithm": {
          "description": "Algorithm used for signing the JWT",
          "$ref": "#/$defs/AlgorithmRepr"
        },
        "format": {
          "description": "Key format - PEM, JWK or JWKS",
          "$ref": "#/$defs/KeyFormat"
        },
        "key": {
          "description": "Encoded key or file path",
          "$ref": "#/$defs/KeyData"
        }
      },
      "required": [
        "algorithm",
        "format",
        "key"
      ]
    },
    "KeyData": {
      "description": "Enum representing key data types",
      "oneOf": [
        {
          "description": "String with encoded key(s)",
          "type": "object",
          "properties": {
            "data": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "data"
          ]
        },
        {
          "description": "File path to the key(s)",
          "type": "object",
          "properties": {
            "file": {
              "type": "string"
            }
          },
          "additionalProperties": false,
          "required": [
            "file"
          ]
        }
      ]
    },
    "KeyFormat": {
      "type": "string",
      "enum": [
        "pem",
        "jwk",
        "jwks"
      ]
    },
    "MetadataMap": {
      "description": "A generic metadata map. Newtype with a flattened map so that serde encodes\njust a JSON/YAML object and not an inner field name.",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/MetadataValue"
      }
    },
    "MetadataValue": {
      "description": "A generic metadata value.\n\nSupported variants:\n- String\n- Bool\n- Number (serde_json::Number – can represent integer & floating point)\n- List (Vec<MetadataValue>)\n- Map (nested MetadataMap)",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "boolean"
        },
        {
          "type": "number"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/MetadataValue"
          }
        },
        {
          "$ref": "#/$defs/MetadataMap"
        }
      ]
    },
    "OpaqueString": {
      "type": "string"
    },
    "SpireConfig": {
      "description": "SPIRE authentication configuration",
      "type": "object",
      "properties": {
        "jwt_audiences": {
          "description": "Audiences to request / verify for JWT SVIDs",
          "type": "array",
          "default": [
            "slim"
          ],
          "items": {
            "type": "string"
          }
        },
        "socket_path": {
          "description": "Path to the SPIFFE Workload API socket (None => use SPIFFE_ENDPOINT_SOCKET env var)",
          "type": [
            "string",
            "null"
          ]
        },
        "target_spiffe_id": {
          "description": "Optional target SPIFFE ID when requesting JWT SVIDs",
          "type": [
            "string",
            "null"
          ]
        },
        "trust_domains": {
          "description": "Optional trust domains override for X.509 bundle retrieval. If set,\n`get_x509_bundle()` uses this instead of deriving from the current SVID.",
          "type": "array",
          "default": [],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "TlsServerConfig": {
      "type": "object",
      "properties": {
        "ca_source": {
          "$ref": "#/$defs/CaSource",
          "default": {
            "type": "none"
          }
        },
        "client_ca": {
          "description": "Client CA sources (choose one: file, pem, or spire for SPIFFE bundle)",
          "$ref": "#/$defs/CaSource",
          "default": {
            "type": "none"
          }
        },
        "include_system_ca_certs_pool": {
          "description": "If true, also load system root CA certificates",
          "type": "boolean",
          "default": true
        },
        "insecure": {
          "description": "insecure do not setup a TLS server",
          "type": "boolean",
          "default": false
        },
        "reload_client_ca_file": {
          "description": "Reload the ClientCAs file when it is modified\nTODO(msardara): not implemented yet",
          "type": "boolean",
          "default": false
        },
        "reload_interval": {
          "anyOf": [
            {
              "$ref": "#/$defs/Duration"
            },
            {
              "type": "null"
            }
          ]
        },
        "source": {
          "$ref": "#/$defs/TlsSource",
          "default": {
            "type": "none"
          }
        },
        "tls_version": {
          "type": "string",
          "default": "tls1.3"
        }
      }
    },
    "TlsSource": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cert": {
              "type": "string"
            },
            "key": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "const": "pem"
            }
          },
          "required": [
            "type",
            "cert",
            "key"
          ]
        },
        {
          "type": "object",
          "properties": {
            "cert": {
              "type": "string"
            },
            "key": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "const": "file"
            }
          },
          "required": [
            "type",
            "cert",
            "key"
          ]
        },
        {
          "description": "SPIRE authentication configuration",
          "type": "object",
          "properties": {
            "jwt_audiences": {
              "description": "Audiences to request / verify for JWT SVIDs",
              "type": "array",
              "default": [
                "slim"
              ],
              "items": {
                "type": "string"
              }
            },
            "socket_path": {
              "description": "Path to the SPIFFE Workload API socket (None => use SPIFFE_ENDPOINT_SOCKET env var)",
              "type": [
                "string",
                "null"
              ]
            },
            "target_spiffe_id": {
              "description": "Optional target SPIFFE ID when requesting JWT SVIDs",
              "type": [
                "string",
                "null"
              ]
            },
            "trust_domains": {
              "description": "Optional trust domains override for X.509 bundle retrieval. If set,\n`get_x509_bundle()` uses this instead of deriving from the current SVID.",
              "type": "array",
              "default": [],
              "items": {
                "type": "string"
              }
            },
            "type": {
              "type": "string",
              "const": "spire"
            }
          },
          "required": [
            "type"
          ]
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "const": "none"
            }
          },
          "required": [
            "type"
          ]
        }
      ]
    }
  }
}