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
- Set an address override via GrpcOperationRunnerOptions.AddressOverride when registering the plugin.
- Ensure the .proto file declares the address option on the service.
- 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
- Always supply an AddressOverride sourced from configuration.
- Centralize service URL resolution so no operation is left address-less.
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
- The address '{address}' for the '{operation.Name}' gRPC oper
- The URI scheme '{addressUri.Scheme}' is not allowed for the
- The address '{address}' is not allowed for the '{operation.N
- No .proto document for the specified path - {filePath} is fo
- No '{GrpcOperation.PayloadArgumentName}' argument representi
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/0206365e70e49071.
Report an issue: GitHub.