microsoft/semantic-kernel · error · KernelException

No address provided for the '{operation.Name}' gRPC operatio

Error message

No address provided for the '{operation.Name}' gRPC operation.

What it means

Thrown by GrpcOperationRunner when resolving the target address for an operation and both the address override and the operation's own `Address` are null or empty. Without a valid address the runner cannot open a gRPC channel, so it aborts before any network attempt.

Source

Thrown at dotnet/src/Functions/Functions.Grpc/GrpcOperationRunner.cs:174

    /// </summary>
    /// <param name="operation">The gRPC operation.</param>
    /// <returns>The channel address.</returns>
    private string GetAddress(GrpcOperation operation)
    {
        string? address;

        if (this._addressOverride is not null)
        {
            address = this._addressOverride.AbsoluteUri;
        }
        else
        {
            address = operation.Address;
        }

        if (string.IsNullOrEmpty(address))
        {
            throw new KernelException($"No address provided for the '{operation.Name}' gRPC operation.");
        }

        if (!Uri.TryCreate(address, UriKind.Absolute, out var addressUri))
        {
            throw new KernelException($"The address '{address}' for the '{operation.Name}' gRPC operation is not a valid absolute URI.");
        }

        // Validate scheme
        if (!this._allowedSchemes.Contains(addressUri.Scheme, StringComparer.OrdinalIgnoreCase))
        {
            throw new KernelException($"The URI scheme '{addressUri.Scheme}' is not allowed for the '{operation.Name}' gRPC operation. Allowed schemes: {string.Join(", ", this._allowedSchemes)}.");
        }

        // Validate against allowed addresses
        if (this._allowedAddresses is { Count: > 0 })
        {
            bool isAllowed = false;
            foreach (var allowedAddress in this._allowedAddresses)

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Set an address override via GrpcOperationRunnerOptions.AddressOverride when registering the plugin.
  2. Ensure the .proto file declares the address option on the service.
  3. Load the address from configuration and pass it explicitly.

Example fix

// before
kernel.CreatePluginFromGrpc(stream, name); // no address
// after
kernel.CreatePluginFromGrpc(stream, name, new GrpcFunctionExecutionParameters {
    GrpcOperationRunnerOptions = new() { AddressOverride = new Uri(serviceUrl) }
});
Defensive patterns

Strategy: validation

Validate before calling

if (string.IsNullOrWhiteSpace(operationAddress)) {
    runnerOptions.AddressOverride = new Uri(config["ServiceUrl"]);
}

Prevention

When it happens

Trigger: An operation whose .proto-defined address is empty and no `GrpcOperationRunnerOptions.AddressOverride` was supplied; a .proto file missing the option that carries the service URL.

Common situations: Service URL defined only in environment config that wasn't wired into the address override; .proto generated without the address option; dev vs prod address sources out of sync.

Related errors


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/0206365e70e49071. Report an issue: GitHub.