googleapis/mcp-toolbox · error

tool type %q already registered

Error message

tool type %q already registered

What it means

The package's init() registers the 'postgres-list-roles' tool type in the global registry and panics if tools.Register returns false, meaning the type string was already claimed. This is a duplicate-registration guard for programming errors (e.g. a vendored or duplicated package copy linked into the binary), not a user config issue.

Source

Thrown at internal/tools/postgres/postgreslistroles/postgreslistroles.go:76

                WHERE pam.member = r.oid
            ) AS member_of
        FROM pg_roles r
    -- Exclude system and internal roles
        WHERE r.rolname NOT LIKE 'cloudsql%'
        AND r.rolname NOT LIKE 'alloydb_%'
        AND r.rolname NOT LIKE 'pg_%'
    )
    SELECT *
    FROM RoleDetails
    WHERE
        ($1::text IS NULL OR role_name LIKE '%' || $1 || '%')
    ORDER BY role_name
    LIMIT COALESCE($2::int, 50);
`

func init() {
	if !tools.Register(resourceType, newConfig) {
		panic(fmt.Sprintf("tool type %q already registered", resourceType))
	}
}

func newConfig(ctx context.Context, name string, decoder *yaml.Decoder) (tools.ToolConfig, error) {
	actual := Config{ConfigBase: tools.ConfigBase{Name: name}}
	if err := decoder.DecodeContext(ctx, &actual); err != nil {
		return nil, err
	}
	return actual, nil
}

type compatibleSource interface {
	PostgresPool() *pgxpool.Pool
	RunSQL(context.Context, string, []any) (any, error)
}

type Config struct {
	tools.ConfigBase `yaml:",inline"`

View on GitHub (pinned to 8cc6e09de2)

Solutions

  1. Ensure the package is not imported twice under different paths (e.g. vendored and module copies)
  2. Rename the conflicting resourceType constant if two distinct tools share it
  3. Clean go.mod/go.sum and rebuild to eliminate stale duplicate dependencies
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at internal/tools/postgres/postgreslistroles/postgreslistroles.go:76 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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