usebruno/bruno · error · Error
Failed to refresh methods and method ${methodPath} not found
Error message
Failed to refresh methods and method ${methodPath} not found What it means
Thrown after #getMethodFromPath fails AND the fallback #refreshMethods (server reflection / proto reload) returns false, meaning the requested methodPath could still not be located in any service definition. The message embeds the offending methodPath for diagnosis.
Source
Thrown at packages/bruno-requests/src/grpc/grpc-client.js:637
url: request.url,
headers: request.headers,
protoPath: request.protoPath,
collectionPath: collection.pathname,
collectionUid: collection.uid,
certificates: {
ca: rootCertificate,
cert: certificateChain,
key: privateKey,
passphrase,
pfx
},
verifyOptions,
includeDirs,
proxyConfig
});
if (!refreshSuccess) {
throw new Error(`Failed to refresh methods and method ${methodPath} not found`);
}
// Try to get the method again after refresh
try {
method = this.#getMethodFromPath(methodPath);
} catch (refreshError) {
throw refreshError;
}
}
// Extract user-agent from headers if provided (case-insensitive)
// Set it as grpc.primary_user_agent channel option to prepend to the default user-agent
const userAgentKey = Object.keys(request.headers).find(
(key) => key.toLowerCase() === 'user-agent'
);
const userAgentValue = userAgentKey ? request.headers[userAgentKey] : null;
// Resolve proxy target and channel optionsView on GitHub (pinned to 9bdd81c7bd)
Solutions
- Confirm request.method exactly matches "/<Package>.<Service>/<Method>" as declared in the proto (case-sensitive, fully qualified).
- Enable server reflection (e.g. register grpc.reflection.v1alpha.ServerReflection) so #refreshMethods can enumerate services, or supply the correct local proto/protoPath.
- Verify includeDirs in the request resolve to the proto file that actually declares the method.
- Re-import the proto in the collection UI so the cached method list is rebuilt.
Example fix
// before request.method = '/UserService/GetUser'; // missing package prefix -> not found // after request.method = '/acme.users.UserService/GetUser'; // fully qualified, matches proto
Defensive patterns
Strategy: try-catch
Validate before calling
function isValidMethodPath(p) { return /^\/[A-Za-z0-9_.]+\/[A-Za-z0-9_]+$/.test(p); }
// before request: ensure path exists in the reflected service list
const services = await client.listServices();
const exists = services.some(s => s.method.some(m => '/' + s.fullName + '/' + m.name === methodPath));
if (!exists) throw new Error(`method ${methodPath} not in reflected services`); Try / catch
try { method = this.#getMethodFromPath(methodPath); }
catch { const ok = await this.#refreshMethods({...}); if (!ok) throw new Error(`Failed to refresh methods and method ${methodPath} not found`); method = this.#getMethodFromPath(methodPath); } Prevention
- Keep the method selector in sync with the proto's fully-qualified name.
- Enable server reflection so the refresh fallback has a data source.
- Pin proto includeDirs so the correct .proto is loaded.
When it happens
Trigger: request.method (e.g. "/acme.UserService/GetUser") does not match any fully-qualified method in the proto files or in the reflected service list, and reflection either is unsupported by the server or completed without exposing that method.
Common situations: Method renamed or removed in the proto; wrong package/service prefix used; typo in the request method selector; reflection disabled on the server (grpc.reflection.v1alpha not registered); proto includeDirs misconfigured so the wrong .proto was loaded.
Related errors
- Failed to parse ${context}: ${error.message}
- Method ${path} not found, please refresh the methods
- Unsupported method type: ${methodType}
- Failed to create client
AI-assisted analysis of usebruno/bruno@9bdd81c7bd (2026-08-13).
Data as JSON: /api/errors/0584bab72b353f11.
Report an issue: GitHub.