googleapis/mcp-toolbox · error
INTERNAL_ERROR
INTERNAL_ERROR
Error message
error generating manifest: %w
What it means
Wraps any error from GenerateListToolsResult while handling tools/list in protocol version 2025-11-25. Manifest generation failed — typically an inner error 312/313/314 (missing tool, missing source, or GetParameters failure). The client receives an INTERNAL_ERROR JSON-RPC response with the wrapped cause.
Source
Thrown at internal/server/mcp/v20251125/method.go:124
func pingHandler(id jsonrpc.RequestId) (any, error) {
return jsonrpc.JSONRPCResponse{
Jsonrpc: jsonrpc.JSONRPC_VERSION,
Id: id,
Result: struct{}{},
}, nil
}
func toolsListHandler(ctx context.Context, id jsonrpc.RequestId, primitiveMgr *primitives.PrimitiveManager, g group.Group, body []byte) (any, error) {
var req ListToolsRequest
if err := json.Unmarshal(body, &req); err != nil {
err = fmt.Errorf("invalid mcp tools list request: %w", err)
return jsonrpc.NewError(id, jsonrpc.INVALID_REQUEST, err.Error(), nil), err
}
urlParams, _ := util.UrlParamsFromContext(ctx)
listToolsResult, err := GenerateListToolsResult(primitiveMgr, g, urlParams)
if err != nil {
err = fmt.Errorf("error generating manifest: %w", err)
return jsonrpc.NewError(id, jsonrpc.INTERNAL_ERROR, err.Error(), nil), err
}
return jsonrpc.JSONRPCResponse{
Jsonrpc: jsonrpc.JSONRPC_VERSION,
Id: id,
Result: listToolsResult,
}, nil
}
// toolsCallHandler generate a response for tools call.
func toolsCallHandler(ctx context.Context, id jsonrpc.RequestId, g group.Group, primitiveMgr *primitives.PrimitiveManager, body []byte, header http.Header) (any, error) {
if header != nil {
if clientIP := util.ExtractClientIP(header); clientIP != "" {
ctx = util.WithClientIP(ctx, clientIP)
}
}
authServices := primitiveMgr.AuthServices()View on GitHub (pinned to 8cc6e09de2)
Solutions
- Read the wrapped cause after 'error generating manifest:' to find the specific tool problem.
- Fix the offending tool's config (valid source reference, valid SQL statement, valid parameters).
- Check server startup logs for tool/source initialization failures and resolve them.
- Test the database connectivity of each source referenced by your tools.
Example fix
// before: broken tool breaks the whole manifest
tools:
broken_tool:
source: missing_source
// after: reference an initialized source
tools:
broken_tool:
source: postgres Defensive patterns
Strategy: try-catch
Validate before calling
// Before tools/list, confirm the server is healthy and config validated curl -f http://localhost:5000/api/toolbox/validate || exit 1
Try / catch
try {
const res = await rpc.call('tools/list', {});
} catch (e) {
if (e.code === -32603 && /error generating manifest/.test(e.message)) {
const cause = e.message.split('error generating manifest:')[1];
// surface the wrapped cause; fix server tool config before retrying
} else throw e;
} Prevention
- Run config validation at startup so broken tools never reach tools/list.
- Monitor source database connectivity health.
- Read the wrapped cause in the error to identify the failing tool quickly.
When it happens
Trigger: tools/list invoked when any tool in the group cannot be resolved, its source cannot be retrieved, or its parameter schema cannot be generated.
Common situations: Server started with partially broken tool configs (bad SQL, missing sources) — requests fail only when tools/list enumerates the broken tool; runtime database connectivity loss during parameter generation.
Related errors
- INTERNAL_ERROR
- INTERNAL_ERROR
- INTERNAL_ERROR
- tool does not exist: %s
- unable to retrieve %s source for tool %q
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/a0ea611ae86afe50.
Report an issue: GitHub.