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

  1. Read the wrapped cause after 'error generating manifest:' to find the specific tool problem.
  2. Fix the offending tool's config (valid source reference, valid SQL statement, valid parameters).
  3. Check server startup logs for tool/source initialization failures and resolve them.
  4. 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

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


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/a0ea611ae86afe50. Report an issue: GitHub.