groups

package
v2.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 6, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package groups implements MCP tools for GitLab group operations.

The package wraps client-go group APIs for listing groups, retrieving group details, listing members and subgroups, and managing group webhooks through list, get, add, edit, and delete operations. It also provides Markdown formatting for group tool outputs.

Group-adjacent domains such as labels, milestones, boards, variables, service accounts, SAML, LDAP, protected environments, protected branches, epics, group wikis, and group releases live in dedicated sibling packages and share the same catalog-first registration path.

GitLab API References

The package wraps the GitLab Groups API:

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ActionSpecs

func ActionSpecs(client *gitlabclient.Client) []toolutil.ActionSpec

ActionSpecs returns canonical specs for core group and group hook actions.

func Archive

func Archive(ctx context.Context, client *gitlabclient.Client, input ArchiveInput) error

Archive archives a GitLab group. Requires Owner role or administrator.

func ArchiveOutput

func ArchiveOutput(ctx context.Context, client *gitlabclient.Client, input ArchiveInput) (toolutil.DeleteOutput, error)

ArchiveOutput archives a GitLab group and returns the legacy success message shape.

func Delete

func Delete(ctx context.Context, client *gitlabclient.Client, input DeleteInput) error

Delete removes a GitLab group.

func DeleteHook

func DeleteHook(ctx context.Context, client *gitlabclient.Client, input DeleteHookInput) error

DeleteHook removes a webhook from a group.

func DeleteHookCustomHeader added in v2.3.0

func DeleteHookCustomHeader(ctx context.Context, client *gitlabclient.Client, input DeleteHookCustomHeaderInput) error

DeleteHookCustomHeader removes a custom header from a group webhook.

func DeleteHookURLVariable added in v2.3.0

func DeleteHookURLVariable(ctx context.Context, client *gitlabclient.Client, input DeleteHookURLVariableInput) error

DeleteHookURLVariable removes a templated URL variable from a group webhook.

func DeletePushRule added in v2.3.0

func DeletePushRule(ctx context.Context, client *gitlabclient.Client, input DeletePushRuleInput) error

DeletePushRule deletes the push-rule configuration from a group.

func DeletePushRuleOutput added in v2.3.0

func DeletePushRuleOutput(ctx context.Context, client *gitlabclient.Client, input DeletePushRuleInput) (toolutil.DeleteOutput, error)

DeletePushRuleOutput deletes a group's push rules and returns the legacy success message shape.

func FormatHookListMarkdown

func FormatHookListMarkdown(out HookListOutput) string

FormatHookListMarkdown renders a paginated list of group hooks as a Markdown table.

func FormatHookMarkdown

func FormatHookMarkdown(h HookOutput) string

FormatHookMarkdown renders a single group hook as a Markdown summary.

func FormatListMarkdown

func FormatListMarkdown(out ListOutput) string

FormatListMarkdown renders a list of groups as a Markdown table.

func FormatListProjectsMarkdown

func FormatListProjectsMarkdown(out ListProjectsOutput) string

FormatListProjectsMarkdown renders a list of group projects as a Markdown table.

func FormatMemberListMarkdown

func FormatMemberListMarkdown(out MemberListOutput) string

FormatMemberListMarkdown renders a list of group members as a Markdown table.

func FormatOutputMarkdown

func FormatOutputMarkdown(g Output) string

FormatOutputMarkdown renders a single group as a Markdown summary.

func FormatProvisionedUsersListMarkdown added in v2.3.0

func FormatProvisionedUsersListMarkdown(out ProvisionedUsersListOutput) string

FormatProvisionedUsersListMarkdown renders a paginated list of users provisioned for a group through SAML/SCIM as a Markdown table.

func FormatPushRuleMarkdown added in v2.3.0

func FormatPushRuleMarkdown(r PushRuleOutput) string

FormatPushRuleMarkdown renders a group's push-rule configuration as Markdown.

func FormatShareGroupMarkdown added in v2.3.0

func FormatShareGroupMarkdown(out ShareGroupOutput) string

FormatShareGroupMarkdown renders the result of a group-to-group share.

func FormatSharedProjectsListMarkdown added in v2.3.0

func FormatSharedProjectsListMarkdown(out SharedProjectsListOutput) string

FormatSharedProjectsListMarkdown renders the projects shared with a group.

func FormatTransferLocationsListMarkdown added in v2.3.0

func FormatTransferLocationsListMarkdown(out TransferLocationsListOutput) string

FormatTransferLocationsListMarkdown renders the candidate parent groups for a group transfer.

func ResendHookEvent added in v2.3.0

func ResendHookEvent(ctx context.Context, client *gitlabclient.Client, input ResendHookEventInput) error

ResendHookEvent resends a specific previously-delivered group hook event.

func ResendHookEventOutput added in v2.3.0

func ResendHookEventOutput(ctx context.Context, client *gitlabclient.Client, input ResendHookEventInput) (toolutil.VoidOutput, error)

ResendHookEventOutput resends a group hook event and returns the legacy success message shape.

func SetHookCustomHeader added in v2.3.0

func SetHookCustomHeader(ctx context.Context, client *gitlabclient.Client, input SetHookCustomHeaderInput) error

SetHookCustomHeader creates or updates a custom header on a group webhook.

func SetHookCustomHeaderOutput added in v2.3.0

func SetHookCustomHeaderOutput(ctx context.Context, client *gitlabclient.Client, input SetHookCustomHeaderInput) (toolutil.VoidOutput, error)

SetHookCustomHeaderOutput sets a group webhook custom header and returns the legacy success message shape.

func SetHookURLVariable added in v2.3.0

func SetHookURLVariable(ctx context.Context, client *gitlabclient.Client, input SetHookURLVariableInput) error

SetHookURLVariable creates or updates a templated URL variable on a group webhook.

func SetHookURLVariableOutput added in v2.3.0

func SetHookURLVariableOutput(ctx context.Context, client *gitlabclient.Client, input SetHookURLVariableInput) (toolutil.VoidOutput, error)

SetHookURLVariableOutput sets a group webhook URL variable and returns the legacy success message shape.

func TestHook added in v2.3.0

func TestHook(ctx context.Context, client *gitlabclient.Client, input TestHookInput) error

TestHook triggers a test event for a group webhook.

func TestHookOutput added in v2.3.0

func TestHookOutput(ctx context.Context, client *gitlabclient.Client, input TestHookInput) (toolutil.VoidOutput, error)

TestHookOutput triggers a test group hook event and returns the legacy success message shape.

func Unarchive

func Unarchive(ctx context.Context, client *gitlabclient.Client, input ArchiveInput) error

Unarchive unarchives a GitLab group. Requires Owner role or administrator.

func UnarchiveOutput

func UnarchiveOutput(ctx context.Context, client *gitlabclient.Client, input ArchiveInput) (toolutil.DeleteOutput, error)

UnarchiveOutput unarchives a GitLab group and returns the legacy success message shape.

func UnshareGroupFromGroup added in v2.3.0

func UnshareGroupFromGroup(ctx context.Context, client *gitlabclient.Client, input UnshareGroupInput) error

UnshareGroupFromGroup removes a group-to-group share.

Types

type AddHookInput

type AddHookInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookInput
}

AddHookInput defines parameters for adding a new group hook.

type AddPushRuleInput added in v2.3.0

type AddPushRuleInput struct {
	GroupID                    toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	AuthorEmailRegex           string               `json:"author_email_regex,omitempty" jsonschema:"Regex to validate author email addresses"`
	BranchNameRegex            string               `json:"branch_name_regex,omitempty" jsonschema:"Regex to validate branch names"`
	CommitCommitterCheck       *bool                `json:"commit_committer_check,omitempty" jsonschema:"Reject commits where committer is not a group member"`
	CommitCommitterNameCheck   *bool                `json:"commit_committer_name_check,omitempty" jsonschema:"Reject commits where committer name does not match user name"`
	CommitMessageNegativeRegex string               `json:"commit_message_negative_regex,omitempty" jsonschema:"Regex that commit messages must NOT match"`
	CommitMessageRegex         string               `json:"commit_message_regex,omitempty" jsonschema:"Regex that commit messages must match"`
	DenyDeleteTag              *bool                `json:"deny_delete_tag,omitempty" jsonschema:"Deny tag deletion"`
	FileNameRegex              string               `json:"file_name_regex,omitempty" jsonschema:"Regex for disallowed file names"`
	MaxFileSize                *int64               `json:"max_file_size,omitempty" jsonschema:"Maximum file size (MB). 0 means unlimited"`
	MemberCheck                *bool                `json:"member_check,omitempty" jsonschema:"Only allow commits from group members"`
	PreventSecrets             *bool                `json:"prevent_secrets,omitempty" jsonschema:"Reject files that are likely to contain secrets"`
	RejectUnsignedCommits      *bool                `json:"reject_unsigned_commits,omitempty" jsonschema:"Reject commits that are not GPG signed"`
	RejectNonDCOCommits        *bool                `json:"reject_non_dco_commits,omitempty" jsonschema:"Reject commits without DCO certification"`
}

AddPushRuleInput defines parameters for adding push rules to a group.

type ArchiveInput

type ArchiveInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
}

ArchiveInput defines parameters for archiving or unarchiving a group.

type BranchProtectionDefaults added in v2.3.0

type BranchProtectionDefaults struct {
	AllowedToPush             []GroupAccessLevelOutput `json:"allowed_to_push,omitempty"`
	AllowForcePush            bool                     `json:"allow_force_push,omitempty"`
	AllowedToMerge            []GroupAccessLevelOutput `json:"allowed_to_merge,omitempty"`
	DeveloperCanInitialPush   bool                     `json:"developer_can_initial_push,omitempty"`
	CodeOwnerApprovalRequired bool                     `json:"code_owner_approval_required,omitempty"`
}

BranchProtectionDefaults mirrors gl.BranchProtectionDefaults (the default_branch_protection_defaults object).

type BranchProtectionDefaultsInput added in v2.3.0

type BranchProtectionDefaultsInput struct {
	AllowedToPush             []int `` /* 155-byte string literal not displayed */
	AllowForcePush            *bool `json:"allow_force_push,omitempty"             jsonschema:"Allow force push on the default branch"`
	AllowedToMerge            []int `` /* 156-byte string literal not displayed */
	DeveloperCanInitialPush   *bool `json:"developer_can_initial_push,omitempty"   jsonschema:"Allow developers to make the initial push to the default branch"`
	CodeOwnerApprovalRequired *bool `json:"code_owner_approval_required,omitempty" jsonschema:"Require code owner approval before merging into the default branch"`
}

BranchProtectionDefaultsInput mirrors gl.DefaultBranchProtectionDefaultsOptions (the default_branch_protection_defaults object on create/update). Access levels in allowed_to_push / allowed_to_merge are given as a list of integer access levels; GitLab applies the highest provided level.

type CreateInput

type CreateInput struct {
	Name                         string `json:"name"                          jsonschema:"Group name,required"`
	Path                         string `json:"path,omitempty"                jsonschema:"Group URL path (defaults to kebab-case of name)"`
	Description                  string `json:"description,omitempty"         jsonschema:"Group description"`
	Visibility                   string `json:"visibility,omitempty"          jsonschema:"Visibility level (private, internal, public)"`
	ParentID                     int64  `json:"parent_id,omitempty"           jsonschema:"Parent group ID (creates a subgroup)"`
	OrganizationID               *int64 `` /* 158-byte string literal not displayed */
	RequestAccessEnabled         *bool  `json:"request_access_enabled,omitempty" jsonschema:"Allow users to request access"`
	LFSEnabled                   *bool  `json:"lfs_enabled,omitempty"         jsonschema:"Enable Git LFS"`
	DefaultBranch                string `json:"default_branch,omitempty"      jsonschema:"Default branch name"`
	MathRenderingLimitsEnabled   *bool  `json:"math_rendering_limits_enabled,omitempty"   jsonschema:"Enable math rendering limits"`
	WebBasedCommitSigningEnabled *bool  `json:"web_based_commit_signing_enabled,omitempty" jsonschema:"Enable web-based commit signing for projects in this group"`
	AllowPersonalSnippets        *bool  `json:"allow_personal_snippets,omitempty"          jsonschema:"Allow members to create personal snippets"`

	AutoDevopsEnabled               *bool                          `json:"auto_devops_enabled,omitempty"                jsonschema:"Enable Auto DevOps for projects in this group"`
	DefaultBranchProtection         *int64                         `` /* 210-byte string literal not displayed */
	DefaultBranchProtectionDefaults *BranchProtectionDefaultsInput `json:"default_branch_protection_defaults,omitempty" jsonschema:"Default branch protection settings object"`
	DuoAvailability                 string                         `json:"duo_availability,omitempty"                   jsonschema:"GitLab Duo availability (default_on, default_off, never_on)"`
	EmailsEnabled                   *bool                          `json:"emails_enabled,omitempty"                     jsonschema:"Enable email notifications"`
	EmailsDisabled                  *bool                          `` /* 127-byte string literal not displayed */
	EnabledGitAccessProtocol        string                         `json:"enabled_git_access_protocol,omitempty"        jsonschema:"Allowed Git access protocol (ssh, http, all)"`
	ExperimentFeaturesEnabled       *bool                          `json:"experiment_features_enabled,omitempty"        jsonschema:"Enable experimental features"`
	ExtraSharedRunnersMinutesLimit  *int64                         `json:"extra_shared_runners_minutes_limit,omitempty" jsonschema:"Extra shared runner compute-minutes (administrators only)"`
	MembershipLock                  *bool                          `json:"membership_lock,omitempty"                    jsonschema:"Prevent members from being added to projects in this group"`
	MentionsDisabled                *bool                          `json:"mentions_disabled,omitempty"                  jsonschema:"Disable @-mention notifications"`
	ProjectCreationLevel            string                         `json:"project_creation_level,omitempty"             jsonschema:"Who can create projects (noone, maintainer, developer)"`
	RequireTwoFactorAuth            *bool                          `json:"require_two_factor_authentication,omitempty"  jsonschema:"Require two-factor authentication for members"`
	ShareWithGroupLock              *bool                          `json:"share_with_group_lock,omitempty"              jsonschema:"Prevent sharing projects in this group with other groups"`
	SharedRunnersMinutesLimit       *int64                         `json:"shared_runners_minutes_limit,omitempty"       jsonschema:"Shared runner compute-minutes limit (administrators only)"`
	SubGroupCreationLevel           string                         `json:"subgroup_creation_level,omitempty"            jsonschema:"Who can create subgroups (owner, maintainer)"`
	TwoFactorGracePeriod            *int64                         `` /* 131-byte string literal not displayed */
	WikiAccessLevel                 string                         `json:"wiki_access_level,omitempty"                  jsonschema:"Wiki access level (disabled, private, enabled)"`

	UniqueProjectDownloadLimit                  *int64   `` /* 178-byte string literal not displayed */
	UniqueProjectDownloadLimitIntervalInSeconds *int64   `` /* 169-byte string literal not displayed */
	UniqueProjectDownloadLimitAllowlist         []string `` /* 166-byte string literal not displayed */
	UniqueProjectDownloadLimitAlertlist         []int64  `` /* 177-byte string literal not displayed */
	AutoBanUserOnExcessiveProjectsDownload      *bool    `` /* 177-byte string literal not displayed */
}

CreateInput defines parameters for creating a group.

type CustomAttributeOutput added in v2.3.0

type CustomAttributeOutput struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

CustomAttributeOutput mirrors gl.CustomAttribute (a custom_attributes entry).

type DeleteHookCustomHeaderInput added in v2.3.0

type DeleteHookCustomHeaderInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Webhook ID,required"`
	Key     string               `json:"key"      jsonschema:"Custom header key name to delete,required"`
}

DeleteHookCustomHeaderInput defines parameters for deleting a custom header from a group webhook.

type DeleteHookInput

type DeleteHookInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Hook ID to delete,required"`
}

DeleteHookInput defines parameters for deleting a group hook.

type DeleteHookURLVariableInput added in v2.3.0

type DeleteHookURLVariableInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Webhook ID,required"`
	Key     string               `json:"key"      jsonschema:"URL variable key name to delete,required"`
}

DeleteHookURLVariableInput defines parameters for deleting a URL variable from a group webhook.

type DeleteInput

type DeleteInput struct {
	GroupID           toolutil.StringOrInt `json:"group_id"                    jsonschema:"Group ID or URL-encoded path,required"`
	PermanentlyRemove bool                 `json:"permanently_remove,omitempty" jsonschema:"Permanently remove instead of marking for deletion"`
	FullPath          string               `json:"full_path,omitempty"          jsonschema:"Full path (required when permanently_remove=true)"`
}

DeleteInput defines parameters for deleting a group.

type DeletePushRuleInput added in v2.3.0

type DeletePushRuleInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
}

DeletePushRuleInput defines parameters for deleting push rules from a group.

type EditHookInput

type EditHookInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Hook ID to edit,required"`
	HookInput
}

EditHookInput defines parameters for editing an existing group hook.

type EditPushRuleInput added in v2.3.0

type EditPushRuleInput struct {
	GroupID                    toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	AuthorEmailRegex           *string              `json:"author_email_regex,omitempty" jsonschema:"Regex to validate author email addresses"`
	BranchNameRegex            *string              `json:"branch_name_regex,omitempty" jsonschema:"Regex to validate branch names"`
	CommitCommitterCheck       *bool                `json:"commit_committer_check,omitempty" jsonschema:"Reject commits where committer is not a group member"`
	CommitCommitterNameCheck   *bool                `json:"commit_committer_name_check,omitempty" jsonschema:"Reject commits where committer name does not match user name"`
	CommitMessageNegativeRegex *string              `json:"commit_message_negative_regex,omitempty" jsonschema:"Regex that commit messages must NOT match"`
	CommitMessageRegex         *string              `json:"commit_message_regex,omitempty" jsonschema:"Regex that commit messages must match"`
	DenyDeleteTag              *bool                `json:"deny_delete_tag,omitempty" jsonschema:"Deny tag deletion"`
	FileNameRegex              *string              `json:"file_name_regex,omitempty" jsonschema:"Regex for disallowed file names"`
	MaxFileSize                *int64               `json:"max_file_size,omitempty" jsonschema:"Maximum file size (MB). 0 means unlimited"`
	MemberCheck                *bool                `json:"member_check,omitempty" jsonschema:"Only allow commits from group members"`
	PreventSecrets             *bool                `json:"prevent_secrets,omitempty" jsonschema:"Reject files that are likely to contain secrets"`
	RejectUnsignedCommits      *bool                `json:"reject_unsigned_commits,omitempty" jsonschema:"Reject commits that are not GPG signed"`
	RejectNonDCOCommits        *bool                `json:"reject_non_dco_commits,omitempty" jsonschema:"Reject commits without DCO certification"`
}

EditPushRuleInput defines parameters for editing push rules on a group.

type GetHookInput

type GetHookInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Hook ID,required"`
}

GetHookInput defines parameters for retrieving a single group hook.

type GetInput

type GetInput struct {
	GroupID              toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	WithCustomAttributes bool                 `json:"with_custom_attributes,omitempty" jsonschema:"Include custom attributes in the response"`
	WithProjects         *bool                `` /* 140-byte string literal not displayed */
	OrderBy              string               `json:"order_by,omitempty"               jsonschema:"Order embedded projects by field (only applies with with_projects)"`
	Sort                 string               `json:"sort,omitempty"                   jsonschema:"Sort direction for embedded projects (asc, desc)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

GetInput defines parameters for retrieving a single group.

type GetPushRulesInput added in v2.3.0

type GetPushRulesInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
}

GetPushRulesInput defines parameters for getting a group's push rules.

type GroupAccessLevelOutput added in v2.3.0

type GroupAccessLevelOutput struct {
	AccessLevel int `json:"access_level,omitempty"`
}

GroupAccessLevelOutput mirrors gl.GroupAccessLevel (an access-level entry in allowed_to_push / allowed_to_merge).

type HookCustomHeaderInput added in v2.3.0

type HookCustomHeaderInput struct {
	Key   string `json:"key"   jsonschema:"Header name,required"`
	Value string `json:"value,omitempty" jsonschema:"Header value (write-only; masked on read)"`
}

HookCustomHeaderInput is a single custom HTTP header sent with webhook requests. It mirrors gl.HookCustomHeader on add/edit.

type HookCustomHeaderOutput added in v2.3.0

type HookCustomHeaderOutput struct {
	Key   string `json:"key"`
	Value string `json:"value,omitempty"`
}

HookCustomHeaderOutput mirrors gl.HookCustomHeader (a custom_headers entry). The value is write-only and masked on read.

type HookInput

type HookInput struct {
	URL                       string                  `json:"url,omitempty"                        jsonschema:"Webhook URL (required for add)"`
	Name                      string                  `json:"name,omitempty"                       jsonschema:"Hook name"`
	Description               string                  `json:"description,omitempty"                jsonschema:"Hook description"`
	Token                     string                  `json:"token,omitempty"                      jsonschema:"Secret token for payload validation"`
	SigningToken              string                  `json:"signing_token,omitempty"              jsonschema:"Write-only signing token for webhook signature validation"`
	PushEvents                *bool                   `json:"push_events,omitempty"                jsonschema:"Trigger on push events"`
	TagPushEvents             *bool                   `json:"tag_push_events,omitempty"            jsonschema:"Trigger on tag push events"`
	MergeRequestsEvents       *bool                   `json:"merge_requests_events,omitempty"      jsonschema:"Trigger on merge request events"`
	IssuesEvents              *bool                   `json:"issues_events,omitempty"              jsonschema:"Trigger on issue events"`
	NoteEvents                *bool                   `json:"note_events,omitempty"                jsonschema:"Trigger on comment events"`
	JobEvents                 *bool                   `json:"job_events,omitempty"                 jsonschema:"Trigger on job events"`
	PipelineEvents            *bool                   `json:"pipeline_events,omitempty"            jsonschema:"Trigger on pipeline events"`
	WikiPageEvents            *bool                   `json:"wiki_page_events,omitempty"           jsonschema:"Trigger on wiki page events"`
	DeploymentEvents          *bool                   `json:"deployment_events,omitempty"          jsonschema:"Trigger on deployment events"`
	ReleasesEvents            *bool                   `json:"releases_events,omitempty"            jsonschema:"Trigger on release events"`
	MilestoneEvents           *bool                   `json:"milestone_events,omitempty"           jsonschema:"Trigger on milestone events"`
	FeatureFlagEvents         *bool                   `json:"feature_flag_events,omitempty"        jsonschema:"Trigger on feature flag events"`
	SubGroupEvents            *bool                   `json:"subgroup_events,omitempty"            jsonschema:"Trigger on subgroup events"`
	MemberEvents              *bool                   `json:"member_events,omitempty"              jsonschema:"Trigger on member events"`
	VulnerabilityEvents       *bool                   `json:"vulnerability_events,omitempty"       jsonschema:"Trigger on vulnerability events"`
	ConfidentialIssuesEvents  *bool                   `json:"confidential_issues_events,omitempty" jsonschema:"Trigger on confidential issue events"`
	ConfidentialNoteEvents    *bool                   `json:"confidential_note_events,omitempty"   jsonschema:"Trigger on confidential note events"`
	EnableSSLVerification     *bool                   `json:"enable_ssl_verification,omitempty"    jsonschema:"Enable SSL verification for the hook endpoint"`
	PushEventsBranchFilter    string                  `json:"push_events_branch_filter,omitempty"  jsonschema:"Branch filter for push events (e.g. 'main')"`
	BranchFilterStrategy      string                  `json:"branch_filter_strategy,omitempty"      jsonschema:"Branch filter strategy (wildcard, regex, all_branches)"`
	EmojiEvents               *bool                   `json:"emoji_events,omitempty"                jsonschema:"Trigger on emoji events"`
	ResourceAccessTokenEvents *bool                   `json:"resource_access_token_events,omitempty" jsonschema:"Trigger on resource access token events"`
	ProjectEvents             *bool                   `json:"project_events,omitempty"               jsonschema:"Trigger on project events (group-level)"`
	CustomWebhookTemplate     string                  `` /* 130-byte string literal not displayed */
	CustomHeaders             []HookCustomHeaderInput `json:"custom_headers,omitempty"  jsonschema:"Custom HTTP headers added to webhook requests"`
}

HookInput defines common parameters for creating or editing a group hook.

type HookListOutput

type HookListOutput struct {
	toolutil.HintableOutput
	Hooks      []HookOutput              `json:"hooks"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

HookListOutput holds a paginated list of group hooks.

func ListHooks

func ListHooks(ctx context.Context, client *gitlabclient.Client, input ListHooksInput) (HookListOutput, error)

ListHooks retrieves a paginated list of webhooks for a group.

type HookOutput

type HookOutput struct {
	toolutil.HintableOutput
	ID                        int64                    `json:"id"`
	URL                       string                   `json:"url"`
	Name                      string                   `json:"name,omitempty"`
	Description               string                   `json:"description,omitempty"`
	GroupID                   int64                    `json:"group_id"`
	PushEvents                bool                     `json:"push_events"`
	TagPushEvents             bool                     `json:"tag_push_events"`
	MergeRequestsEvents       bool                     `json:"merge_requests_events"`
	IssuesEvents              bool                     `json:"issues_events"`
	NoteEvents                bool                     `json:"note_events"`
	JobEvents                 bool                     `json:"job_events"`
	PipelineEvents            bool                     `json:"pipeline_events"`
	WikiPageEvents            bool                     `json:"wiki_page_events"`
	DeploymentEvents          bool                     `json:"deployment_events"`
	ReleasesEvents            bool                     `json:"releases_events"`
	SubGroupEvents            bool                     `json:"subgroup_events"`
	MemberEvents              bool                     `json:"member_events"`
	ConfidentialIssuesEvents  bool                     `json:"confidential_issues_events"`
	ConfidentialNoteEvents    bool                     `json:"confidential_note_events"`
	EnableSSLVerification     bool                     `json:"enable_ssl_verification"`
	AlertStatus               string                   `json:"alert_status,omitempty"`
	DisabledUntil             string                   `json:"disabled_until,omitempty"`
	URLVariables              []HookURLVariable        `json:"url_variables,omitempty"`
	FeatureFlagEvents         bool                     `json:"feature_flag_events"`
	MilestoneEvents           bool                     `json:"milestone_events"`
	VulnerabilityEvents       bool                     `json:"vulnerability_events"`
	EmojiEvents               bool                     `json:"emoji_events"`
	ResourceAccessTokenEvents bool                     `json:"resource_access_token_events"`
	ProjectEvents             bool                     `json:"project_events"`
	PushEventsBranchFilter    string                   `json:"push_events_branch_filter,omitempty"`
	BranchFilterStrategy      string                   `json:"branch_filter_strategy,omitempty"`
	TokenPresent              bool                     `json:"token_present"`
	SigningTokenPresent       bool                     `json:"signing_token_present"`
	CreatedAt                 string                   `json:"created_at,omitempty"`
	CustomWebhookTemplate     string                   `json:"custom_webhook_template,omitempty"`
	CustomHeaders             []HookCustomHeaderOutput `json:"custom_headers,omitempty"`
}

HookOutput represents a GitLab group webhook.

func AddHook

func AddHook(ctx context.Context, client *gitlabclient.Client, input AddHookInput) (HookOutput, error)

AddHook adds a new webhook to a group. Requires the webhook URL.

func EditHook

func EditHook(ctx context.Context, client *gitlabclient.Client, input EditHookInput) (HookOutput, error)

EditHook updates an existing group webhook configuration.

func GetHook

func GetHook(ctx context.Context, client *gitlabclient.Client, input GetHookInput) (HookOutput, error)

GetHook retrieves a single group webhook by its ID.

type HookURLVariable

type HookURLVariable struct {
	Key   string `json:"key"`
	Value string `json:"value,omitempty"`
}

HookURLVariable represents a templated webhook URL variable used to substitute placeholders like {var_name} in a webhook URL with secret values resolved server-side. Mirrors gl.HookURLVariable (Key + Value); the value is write-only and masked on read, so it is omitted unless GitLab returns it.

type InvitedListInput added in v2.3.0

type InvitedListInput struct {
	GroupID              toolutil.StringOrInt `json:"group_id"                 jsonschema:"Group ID or URL-encoded path,required"`
	Search               string               `json:"search,omitempty"         jsonschema:"Filter invited groups by name or path"`
	MinAccessLevel       int                  `` /* 148-byte string literal not displayed */
	Relation             []string             `json:"relation,omitempty"       jsonschema:"Filter by relation (direct, inherited)"`
	WithCustomAttributes bool                 `json:"with_custom_attributes,omitempty" jsonschema:"Include custom attributes in the response"`
	OrderBy              string               `json:"order_by,omitempty"       jsonschema:"Order invited groups by field (name, path, id)"`
	Sort                 string               `json:"sort,omitempty"           jsonschema:"Sort direction (asc, desc)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

InvitedListInput defines parameters for listing groups invited to a group.

type LDAPGroupLinkOutput added in v2.3.0

type LDAPGroupLinkOutput struct {
	CN           string `json:"cn"`
	Filter       string `json:"filter,omitempty"`
	GroupAccess  int    `json:"group_access"`
	Provider     string `json:"provider"`
	MemberRoleID int64  `json:"member_role_id,omitempty"`
}

LDAPGroupLinkOutput mirrors gl.LDAPGroupLink (an ldap_group_links entry).

type ListHooksInput

type ListHooksInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	OrderBy string               `json:"order_by,omitempty" jsonschema:"Order hooks by field (id)"`
	Sort    string               `json:"sort,omitempty"     jsonschema:"Sort direction (asc, desc)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

ListHooksInput defines parameters for listing group hooks.

type ListInput

type ListInput struct {
	Search               string  `json:"search,omitempty"                jsonschema:"Filter groups by name or path"`
	Owned                bool    `json:"owned,omitempty"                 jsonschema:"Limit to groups explicitly owned by the authenticated user"`
	TopLevelOnly         bool    `json:"top_level_only,omitempty"        jsonschema:"Limit to top-level groups (exclude subgroups)"`
	OrderBy              string  `json:"order_by,omitempty"              jsonschema:"Order groups by field (name, path, id, similarity)"`
	Sort                 string  `json:"sort,omitempty"                  jsonschema:"Sort direction (asc, desc)"`
	Visibility           string  `json:"visibility,omitempty"            jsonschema:"Filter by visibility (public, internal, private)"`
	AllAvailable         bool    `json:"all_available,omitempty"         jsonschema:"Show all groups accessible by the authenticated user"`
	Statistics           bool    `json:"statistics,omitempty"            jsonschema:"Include group statistics (storage, counts)"`
	WithCustomAttributes bool    `json:"with_custom_attributes,omitempty" jsonschema:"Include custom attributes in the response"`
	SkipGroups           []int64 `json:"skip_groups,omitempty"           jsonschema:"Group IDs to exclude from results"`
	MinAccessLevel       int     `` /* 131-byte string literal not displayed */
	RepositoryStorage    string  `json:"repository_storage,omitempty"    jsonschema:"Filter by repository storage shard (administrators only)"`
	Active               *bool   `json:"active,omitempty"                jsonschema:"Filter by active (true) or inactive/archived (false) groups"`
	Archived             *bool   `json:"archived,omitempty"              jsonschema:"Limit to archived groups (true) or non-archived (false)"`
	MarkedForDeletionOn  string  `json:"marked_for_deletion_on,omitempty" jsonschema:"Filter to groups marked for deletion on this date (YYYY-MM-DD)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

ListInput defines parameters for listing groups.

type ListOutput

type ListOutput struct {
	toolutil.HintableOutput
	Groups     []Output                  `json:"groups"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

ListOutput holds a paginated list of groups.

func InvitedList added in v2.3.0

func InvitedList(ctx context.Context, client *gitlabclient.Client, input InvitedListInput) (ListOutput, error)

InvitedList lists the groups invited to the given group.

func List

func List(ctx context.Context, client *gitlabclient.Client, input ListInput) (ListOutput, error)

List retrieves a paginated list of GitLab groups visible to the authenticated user. Supports filtering by search term, ownership, and top-level-only restriction. Returns the groups with pagination metadata.

func Search(ctx context.Context, client *gitlabclient.Client, input SearchInput) (ListOutput, error)

Search searches for groups by query string.

func SharedWithList added in v2.3.0

func SharedWithList(ctx context.Context, client *gitlabclient.Client, input SharedWithListInput) (ListOutput, error)

SharedWithList lists the groups that have been shared with the given group.

func SubgroupsList

func SubgroupsList(ctx context.Context, client *gitlabclient.Client, input SubgroupsListInput) (ListOutput, error)

SubgroupsList retrieves a paginated list of descendant groups (subgroups) for a given parent group. Supports filtering by search term and pagination. Returns the subgroups with pagination metadata.

type ListProjectsInput

type ListProjectsInput struct {
	GroupID                  toolutil.StringOrInt `json:"group_id"                  jsonschema:"Group ID or URL-encoded path,required"`
	Search                   string               `json:"search,omitempty"          jsonschema:"Filter projects by name"`
	Archived                 *bool                `json:"archived,omitempty"        jsonschema:"Filter archived projects"`
	Visibility               string               `json:"visibility,omitempty"      jsonschema:"Filter by visibility (public, internal, private)"`
	OrderBy                  string               `` /* 131-byte string literal not displayed */
	Sort                     string               `json:"sort,omitempty"            jsonschema:"Sort direction (asc, desc)"`
	Simple                   bool                 `json:"simple,omitempty"          jsonschema:"Return limited fields"`
	Owned                    bool                 `json:"owned,omitempty"           jsonschema:"Limit to projects owned by current user"`
	Starred                  bool                 `json:"starred,omitempty"         jsonschema:"Limit to starred projects"`
	IncludeSubGroups         bool                 `json:"include_subgroups,omitempty" jsonschema:"Include projects in subgroups"`
	WithShared               *bool                `json:"with_shared,omitempty"     jsonschema:"Include shared projects"`
	Active                   *bool                `json:"active,omitempty"          jsonschema:"Filter by active (true) or inactive/archived (false) projects"`
	MinAccessLevel           int                  `` /* 171-byte string literal not displayed */
	Topic                    string               `json:"topic,omitempty"           jsonschema:"Filter projects by topic"`
	WithCustomAttributes     bool                 `json:"with_custom_attributes,omitempty"     jsonschema:"Include custom attributes in the response"`
	WithIssuesEnabled        *bool                `json:"with_issues_enabled,omitempty"        jsonschema:"Limit to projects with issues enabled"`
	WithMergeRequestsEnabled *bool                `json:"with_merge_requests_enabled,omitempty" jsonschema:"Limit to projects with merge requests enabled"`
	WithSecurityReports      *bool                `json:"with_security_reports,omitempty"      jsonschema:"Limit to projects with security reports (Ultimate)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

ListProjectsInput defines parameters for listing group projects.

type ListProjectsOutput

type ListProjectsOutput struct {
	toolutil.HintableOutput
	Projects   []ProjectItem             `json:"projects"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

ListProjectsOutput holds a paginated list of group projects.

func ListProjects

func ListProjects(ctx context.Context, client *gitlabclient.Client, input ListProjectsInput) (ListProjectsOutput, error)

ListProjects retrieves projects belonging to a group.

type ListProvisionedUsersInput added in v2.3.0

type ListProvisionedUsersInput struct {
	GroupID       toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	Username      string               `json:"username,omitempty" jsonschema:"Filter provisioned users by exact username"`
	Search        string               `json:"search,omitempty" jsonschema:"Search provisioned users by name, username, or email"`
	Active        *bool                `json:"active,omitempty" jsonschema:"Filter to active (true) or inactive (false) users"`
	Blocked       *bool                `json:"blocked,omitempty" jsonschema:"Filter to blocked (true) or unblocked (false) users"`
	CreatedAfter  string               `json:"created_after,omitempty" jsonschema:"Return users created after this RFC3339 timestamp (e.g. 2024-01-02T15:04:05Z)"`
	CreatedBefore string               `json:"created_before,omitempty" jsonschema:"Return users created before this RFC3339 timestamp (e.g. 2024-12-31T23:59:59Z)"`
	OrderBy       string               `json:"order_by,omitempty" jsonschema:"Column to order provisioned users by (e.g. id, name, username, created_at, updated_at)"`
	Sort          string               `json:"sort,omitempty" jsonschema:"Sort direction: asc or desc"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

ListProvisionedUsersInput defines parameters for listing the users provisioned for a group through SAML/SCIM. Mirrors gl.ListProvisionedUsersOptions filters plus offset and keyset pagination.

type ListSharedProjectsInput added in v2.3.0

type ListSharedProjectsInput struct {
	GroupID                  toolutil.StringOrInt `json:"group_id"                  jsonschema:"Group ID or URL-encoded path,required"`
	Archived                 *bool                `json:"archived,omitempty"        jsonschema:"Filter archived projects"`
	MinAccessLevel           int                  `` /* 171-byte string literal not displayed */
	OrderBy                  string               `json:"order_by,omitempty"        jsonschema:"Order by field (id, name, path, created_at, updated_at, last_activity_at)"`
	Search                   string               `json:"search,omitempty"          jsonschema:"Filter projects by name"`
	Simple                   *bool                `json:"simple,omitempty"          jsonschema:"Return limited fields"`
	Sort                     string               `json:"sort,omitempty"            jsonschema:"Sort direction (asc, desc)"`
	Starred                  *bool                `json:"starred,omitempty"         jsonschema:"Limit to starred projects"`
	Visibility               string               `json:"visibility,omitempty"      jsonschema:"Filter by visibility (public, internal, private)"`
	WithCustomAttributes     *bool                `json:"with_custom_attributes,omitempty"      jsonschema:"Include custom attributes in the response"`
	WithIssuesEnabled        *bool                `json:"with_issues_enabled,omitempty"         jsonschema:"Limit to projects with issues enabled"`
	WithMergeRequestsEnabled *bool                `json:"with_merge_requests_enabled,omitempty" jsonschema:"Limit to projects with merge requests enabled"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

ListSharedProjectsInput defines parameters for listing projects shared with a group.

type MemberListOutput

type MemberListOutput struct {
	toolutil.HintableOutput
	Members    []MemberOutput            `json:"members"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

MemberListOutput holds a paginated list of group members.

func MembersList

func MembersList(ctx context.Context, client *gitlabclient.Client, input MembersListInput) (MemberListOutput, error)

MembersList retrieves all members of a GitLab group, including inherited members from parent groups. Supports filtering by name or username and pagination. Returns the member list with pagination metadata.

type MemberOutput

type MemberOutput struct {
	ID                int64               `json:"id"`
	Username          string              `json:"username"`
	Name              string              `json:"name"`
	State             string              `json:"state"`
	AvatarURL         string              `json:"avatar_url,omitempty"`
	AccessLevel       int                 `json:"access_level"`
	WebURL            string              `json:"web_url"`
	CreatedAt         string              `json:"created_at,omitempty"`
	CreatedBy         *MemberUserOutput   `json:"created_by,omitempty"`
	ExpiresAt         string              `json:"expires_at,omitempty"`
	Email             string              `json:"email,omitempty"`
	PublicEmail       string              `json:"public_email,omitempty"`
	GroupSAMLIdentity *SAMLIdentityOutput `json:"group_saml_identity,omitempty"`
	MemberRole        *MemberRoleOutput   `json:"member_role,omitempty"`
	IsUsingSeat       bool                `json:"is_using_seat,omitempty"`
}

MemberOutput represents a GitLab group member.

Fields mirror gl.GroupMember (1:1 audit policy: full nested objects). The created_by, group_saml_identity, and member_role sub-objects are surfaced as full local mirrors on their canonical json keys (C-IMPORTS: replicated here rather than imported from sibling packages to preserve the zero-import-cycle constraint).

func MemberToOutput

func MemberToOutput(m *gl.GroupMember) MemberOutput

MemberToOutput converts a GitLab API gl.GroupMember to the MCP tool output format, surfacing the full created_by, group_saml_identity, and member_role sub-objects (1:1 audit policy: full nested objects).

type MemberRoleOutput added in v2.3.0

type MemberRoleOutput = toolutil.MemberRoleOutput

MemberRoleOutput mirrors gl.MemberRole (the member_role object). Custom member roles are an Enterprise (Premium/Ultimate) feature; the object is nil on instances or members without a custom role. Canonical shape shared via toolutil.

type MemberUserOutput added in v2.3.0

type MemberUserOutput = toolutil.MemberUserOutput

MemberUserOutput mirrors gl.MemberCreatedBy (the created_by object); canonical shape shared via toolutil.

type MembersListInput

type MembersListInput struct {
	GroupID      toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	Query        string               `json:"query,omitempty"          jsonschema:"Filter members by name or username"`
	UserIDs      []int64              `json:"user_ids,omitempty"       jsonschema:"Filter the result to the given user IDs"`
	ShowSeatInfo *bool                `json:"show_seat_info,omitempty" jsonschema:"Include seat information for each member (Premium/Ultimate)"`
	OrderBy      string               `json:"order_by,omitempty"       jsonschema:"Order members by field (id, name, username, access_level, last_activity_on)"`
	Sort         string               `json:"sort,omitempty"           jsonschema:"Sort direction (asc, desc)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

MembersListInput defines parameters for listing group members.

type Output

type Output struct {
	toolutil.HintableOutput
	ID                    int64  `json:"id"`
	Name                  string `json:"name"`
	Path                  string `json:"path"`
	FullPath              string `json:"full_path"`
	FullName              string `json:"full_name,omitempty"`
	Description           string `json:"description,omitempty"`
	Visibility            string `json:"visibility"`
	WebURL                string `json:"web_url"`
	ParentID              int64  `json:"parent_id,omitempty"`
	OrganizationID        int64  `json:"organization_id,omitempty"`
	DefaultBranch         string `json:"default_branch,omitempty"`
	RequestAccessEnabled  bool   `json:"request_access_enabled"`
	CreatedAt             string `json:"created_at,omitempty"`
	MarkedForDeletion     string `json:"marked_for_deletion_on,omitempty"`
	AvatarURL             string `json:"avatar_url,omitempty"`
	ProjectCreationLevel  string `json:"project_creation_level,omitempty"`
	SubGroupCreationLevel string `json:"subgroup_creation_level,omitempty"`
	LFSEnabled            bool   `json:"lfs_enabled"`
	SharedRunnersSetting  string `json:"shared_runners_setting,omitempty"`
	// Fields added in client-go v2.41.0.
	Archived                             bool   `json:"archived"`
	PreventSharingGroupsOutsideHierarchy bool   `json:"prevent_sharing_groups_outside_hierarchy"`
	EnabledGitAccessProtocol             string `json:"enabled_git_access_protocol,omitempty"`
	MathRenderingLimitsEnabled           bool   `json:"math_rendering_limits_enabled"`
	LockMathRenderingLimitsEnabled       bool   `json:"lock_math_rendering_limits_enabled"`
	DuoAvailability                      string `json:"duo_availability,omitempty" tier:"premium"`
	DuoFeaturesEnabled                   bool   `json:"duo_features_enabled" tier:"premium"`
	LockDuoFeaturesEnabled               bool   `json:"lock_duo_features_enabled" tier:"premium"`
	ExperimentFeaturesEnabled            bool   `json:"experiment_features_enabled" tier:"premium"`
	// Remaining gl.Group fields (1:1 audit).
	MembershipLock                            bool                      `json:"membership_lock" tier:"premium"`
	MaxArtifactsSize                          int64                     `json:"max_artifacts_size,omitempty"`
	DefaultBranchProtectionDefaults           *BranchProtectionDefaults `json:"default_branch_protection_defaults,omitempty"`
	RepositoryStorage                         string                    `json:"repository_storage,omitempty" tier:"premium"`
	FileTemplateProjectID                     int64                     `json:"file_template_project_id,omitempty" tier:"premium"`
	Statistics                                *StatisticsOutput         `json:"statistics,omitempty"`
	CustomAttributes                          []CustomAttributeOutput   `json:"custom_attributes,omitempty"`
	ShareWithGroupLock                        bool                      `json:"share_with_group_lock"`
	RequireTwoFactorAuth                      bool                      `json:"require_two_factor_authentication"`
	TwoFactorGracePeriod                      int64                     `json:"two_factor_grace_period,omitempty"`
	AutoDevopsEnabled                         bool                      `json:"auto_devops_enabled"`
	EmailsEnabled                             bool                      `json:"emails_enabled"`
	EmailsDisabled                            bool                      `json:"emails_disabled"`
	MentionsDisabled                          bool                      `json:"mentions_disabled"`
	RunnersToken                              string                    `json:"runners_token,omitempty"`
	SharedWithGroups                          []SharedWithGroupOutput   `json:"shared_with_groups,omitempty"`
	LDAPCN                                    string                    `json:"ldap_cn,omitempty" tier:"premium"`
	LDAPAccess                                int                       `json:"ldap_access,omitempty" tier:"premium"`
	LDAPGroupLinks                            []LDAPGroupLinkOutput     `json:"ldap_group_links,omitempty"`
	SAMLGroupLinks                            []SAMLGroupLinkOutput     `json:"saml_group_links,omitempty"`
	SharedRunnersMinutesLimit                 int64                     `json:"shared_runners_minutes_limit,omitempty" tier:"premium"`
	ExtraSharedRunnersMinutesLimit            int64                     `json:"extra_shared_runners_minutes_limit,omitempty" tier:"premium"`
	PreventForkingOutsideGroup                bool                      `json:"prevent_forking_outside_group" tier:"premium"`
	IPRestrictionRanges                       string                    `json:"ip_restriction_ranges,omitempty" tier:"premium"`
	AllowedEmailDomainsList                   string                    `json:"allowed_email_domains_list,omitempty" tier:"premium"`
	WikiAccessLevel                           string                    `json:"wiki_access_level,omitempty" tier:"premium"`
	OnlyAllowMergeIfPipelineSucceeds          bool                      `json:"only_allow_merge_if_pipeline_succeeds" tier:"premium"`
	AllowMergeOnSkippedPipeline               bool                      `json:"allow_merge_on_skipped_pipeline" tier:"premium"`
	OnlyAllowMergeIfAllDiscussionsAreResolved bool                      `json:"only_allow_merge_if_all_discussions_are_resolved" tier:"premium"`
	DefaultBranchProtection                   int64                     `json:"default_branch_protection,omitempty"`
	Projects                                  []ProjectItem             `json:"projects,omitempty"`
	SharedProjects                            []ProjectItem             `json:"shared_projects,omitempty"`
}

Output represents a GitLab group.

Fields mirror gl.Group (1:1 audit policy: full nested objects). Nested sub-objects (statistics, custom_attributes, default_branch_protection_defaults, shared_with_groups, ldap_group_links, saml_group_links, projects, shared_projects) are surfaced as full local mirrors on their canonical json keys (C-IMPORTS: replicated here rather than imported from sibling packages to preserve the zero-import-cycle constraint).

func Create

func Create(ctx context.Context, client *gitlabclient.Client, input CreateInput) (Output, error)

Create creates a new GitLab group.

func Get

func Get(ctx context.Context, client *gitlabclient.Client, input GetInput) (Output, error)

Get retrieves a single GitLab group by its ID or URL-encoded path. Returns the group details or an error if the group is not found.

func Restore

func Restore(ctx context.Context, client *gitlabclient.Client, input RestoreInput) (Output, error)

Restore restores a group that was marked for deletion.

func ToOutput

func ToOutput(g *gl.Group) Output

ToOutput converts a GitLab API gl.Group to the MCP tool output format, extracting identifier, path, visibility, and parent information.

func TransferProject

func TransferProject(ctx context.Context, client *gitlabclient.Client, input TransferInput) (Output, error)

TransferProject transfers a project into the group namespace.

func TransferSubGroup added in v2.3.0

func TransferSubGroup(ctx context.Context, client *gitlabclient.Client, input TransferSubGroupInput) (Output, error)

TransferSubGroup moves a group under a new parent group, or promotes a subgroup to a top-level group when parent_id is omitted.

func Update

func Update(ctx context.Context, client *gitlabclient.Client, input UpdateInput) (Output, error)

Update modifies an existing GitLab group.

func UploadAvatar added in v2.3.0

func UploadAvatar(ctx context.Context, client *gitlabclient.Client, input UploadAvatarInput) (Output, error)

UploadAvatar uploads or replaces the avatar for a group.

It accepts either file_path (a local file the MCP server reads) or content_base64 (base64-encoded bytes), exactly one of which must be set, and streams the image to the GitLab Groups UploadAvatar endpoint as a multipart upload. The updated group is returned in the full group output shape.

type ProjectItem

type ProjectItem struct {
	ID                int64  `json:"id"`
	Name              string `json:"name"`
	PathWithNamespace string `json:"path_with_namespace"`
	Description       string `json:"description,omitempty"`
	Visibility        string `json:"visibility"`
	WebURL            string `json:"web_url"`
	DefaultBranch     string `json:"default_branch,omitempty"`
	Archived          bool   `json:"archived"`
	CreatedAt         string `json:"created_at,omitempty"`
}

ProjectItem is a simplified project representation for group context.

type ProvisionedUserBasicUser added in v2.3.0

type ProvisionedUserBasicUser struct {
	ID        int64  `json:"id"`
	Username  string `json:"username"`
	Name      string `json:"name"`
	State     string `json:"state,omitempty"`
	CreatedAt string `json:"created_at,omitempty"`
	AvatarURL string `json:"avatar_url,omitempty"`
	WebURL    string `json:"web_url,omitempty"`
}

ProvisionedUserBasicUser mirrors gl.BasicUser (the created_by object).

type ProvisionedUserCustomAttribute added in v2.3.0

type ProvisionedUserCustomAttribute struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

ProvisionedUserCustomAttribute mirrors gl.CustomAttribute (custom_attributes).

type ProvisionedUserIdentity added in v2.3.0

type ProvisionedUserIdentity struct {
	Provider  string `json:"provider"`
	ExternUID string `json:"extern_uid"`
}

ProvisionedUserIdentity mirrors gl.UserIdentity (the identities object).

type ProvisionedUserOutput added in v2.3.0

type ProvisionedUserOutput struct {
	ID                             int64                            `json:"id"`
	Username                       string                           `json:"username"`
	Email                          string                           `json:"email,omitempty"`
	Name                           string                           `json:"name"`
	State                          string                           `json:"state"`
	WebURL                         string                           `json:"web_url,omitempty"`
	CreatedAt                      string                           `json:"created_at,omitempty"`
	Bio                            string                           `json:"bio,omitempty"`
	Bot                            bool                             `json:"bot,omitempty"`
	Location                       string                           `json:"location,omitempty"`
	PublicEmail                    string                           `json:"public_email,omitempty"`
	Skype                          string                           `json:"skype,omitempty"`
	Linkedin                       string                           `json:"linkedin,omitempty"`
	Twitter                        string                           `json:"twitter,omitempty"`
	WebsiteURL                     string                           `json:"website_url,omitempty"`
	Organization                   string                           `json:"organization,omitempty"`
	JobTitle                       string                           `json:"job_title,omitempty"`
	ExternUID                      string                           `json:"extern_uid,omitempty"`
	Provider                       string                           `json:"provider,omitempty"`
	ThemeID                        int64                            `json:"theme_id,omitempty"`
	LastActivityOn                 string                           `json:"last_activity_on,omitempty"`
	ColorSchemeID                  int64                            `json:"color_scheme_id,omitempty"`
	IsAdmin                        bool                             `json:"is_admin,omitempty"`
	IsAuditor                      bool                             `json:"is_auditor,omitempty"`
	AvatarURL                      string                           `json:"avatar_url,omitempty"`
	CanCreateGroup                 bool                             `json:"can_create_group,omitempty"`
	CanCreateProject               bool                             `json:"can_create_project,omitempty"`
	CanCreateOrganization          bool                             `json:"can_create_organization,omitempty"`
	ProjectsLimit                  int64                            `json:"projects_limit,omitempty"`
	CurrentSignInAt                string                           `json:"current_sign_in_at,omitempty"`
	CurrentSignInIP                string                           `json:"current_sign_in_ip,omitempty"`
	LastSignInAt                   string                           `json:"last_sign_in_at,omitempty"`
	LastSignInIP                   string                           `json:"last_sign_in_ip,omitempty"`
	ConfirmedAt                    string                           `json:"confirmed_at,omitempty"`
	TwoFactorEnabled               bool                             `json:"two_factor_enabled,omitempty"`
	Note                           string                           `json:"note,omitempty"`
	Identities                     []ProvisionedUserIdentity        `json:"identities,omitempty"`
	SCIMIdentities                 []ProvisionedUserSCIMIdentity    `json:"scim_identities,omitempty"`
	External                       bool                             `json:"external,omitempty"`
	PrivateProfile                 bool                             `json:"private_profile,omitempty"`
	SharedRunnersMinutesLimit      int64                            `json:"shared_runners_minutes_limit,omitempty"`
	ExtraSharedRunnersMinutesLimit int64                            `json:"extra_shared_runners_minutes_limit,omitempty"`
	UsingLicenseSeat               bool                             `json:"using_license_seat,omitempty"`
	CustomAttributes               []ProvisionedUserCustomAttribute `json:"custom_attributes,omitempty"`
	NamespaceID                    int64                            `json:"namespace_id,omitempty"`
	Locked                         bool                             `json:"locked,omitempty"`
	CreatedBy                      *ProvisionedUserBasicUser        `json:"created_by,omitempty"`
}

ProvisionedUserOutput mirrors gl.User 1:1 for users provisioned through SAML/SCIM. Nested identities (identities, scim_identities, custom_attributes, created_by) are surfaced as full local mirrors on their canonical json keys (C-IMPORTS: replicated here rather than imported from sibling packages to preserve the zero-import-cycle constraint).

func ProvisionedUserToOutput added in v2.3.0

func ProvisionedUserToOutput(u *gl.User) ProvisionedUserOutput

ProvisionedUserToOutput converts a gl.User to the full provisioned-user output shape (1:1 audit policy: full nested objects).

type ProvisionedUserSCIMIdentity added in v2.3.0

type ProvisionedUserSCIMIdentity struct {
	ExternUID string `json:"extern_uid"`
	GroupID   int64  `json:"group_id"`
	Active    bool   `json:"active"`
}

ProvisionedUserSCIMIdentity mirrors gl.SCIMIdentity (the scim_identities object).

type ProvisionedUsersListOutput added in v2.3.0

type ProvisionedUsersListOutput struct {
	toolutil.HintableOutput
	Users      []ProvisionedUserOutput   `json:"users"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

ProvisionedUsersListOutput holds a paginated list of provisioned users.

func ListProvisionedUsers added in v2.3.0

ListProvisionedUsers lists the users provisioned for a group through SAML/SCIM (Premium/Ultimate). Supports username/search/active/blocked/created_after/ created_before filters plus offset and keyset pagination.

type PushRuleOutput added in v2.3.0

type PushRuleOutput struct {
	toolutil.HintableOutput
	ID                         int64  `json:"id"`
	CommitMessageRegex         string `json:"commit_message_regex,omitempty"`
	CommitMessageNegativeRegex string `json:"commit_message_negative_regex,omitempty"`
	BranchNameRegex            string `json:"branch_name_regex,omitempty"`
	DenyDeleteTag              bool   `json:"deny_delete_tag"`
	MemberCheck                bool   `json:"member_check"`
	PreventSecrets             bool   `json:"prevent_secrets"`
	AuthorEmailRegex           string `json:"author_email_regex,omitempty"`
	FileNameRegex              string `json:"file_name_regex,omitempty"`
	MaxFileSize                int64  `json:"max_file_size"`
	CommitCommitterCheck       bool   `json:"commit_committer_check"`
	CommitCommitterNameCheck   bool   `json:"commit_committer_name_check"`
	RejectUnsignedCommits      bool   `json:"reject_unsigned_commits"`
	RejectNonDCOCommits        bool   `json:"reject_non_dco_commits"`
	CreatedAt                  string `json:"created_at,omitempty"`
}

PushRuleOutput represents a group's push-rule configuration. It mirrors gl.GroupPushRules 1:1 (1:1 audit output-fidelity policy).

func AddPushRule added in v2.3.0

func AddPushRule(ctx context.Context, client *gitlabclient.Client, input AddPushRuleInput) (PushRuleOutput, error)

AddPushRule adds push-rule configuration to a group.

func EditPushRule added in v2.3.0

func EditPushRule(ctx context.Context, client *gitlabclient.Client, input EditPushRuleInput) (PushRuleOutput, error)

EditPushRule modifies the push-rule configuration for a group.

func GetPushRules added in v2.3.0

func GetPushRules(ctx context.Context, client *gitlabclient.Client, input GetPushRulesInput) (PushRuleOutput, error)

GetPushRules retrieves the push-rule configuration for a group.

type ResendHookEventInput added in v2.3.0

type ResendHookEventInput struct {
	GroupID     toolutil.StringOrInt `json:"group_id"      jsonschema:"Group ID or URL-encoded path,required"`
	HookID      int64                `json:"hook_id"       jsonschema:"Webhook ID,required"`
	HookEventID int64                `json:"hook_event_id" jsonschema:"ID of the hook event to resend,required"`
}

ResendHookEventInput defines parameters for resending a group hook event.

type RestoreInput

type RestoreInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
}

RestoreInput defines parameters for restoring a group marked for deletion.

type SAMLGroupLinkOutput added in v2.3.0

type SAMLGroupLinkOutput struct {
	Name         string `json:"name"`
	AccessLevel  int    `json:"access_level"`
	MemberRoleID int64  `json:"member_role_id,omitempty"`
	Provider     string `json:"provider,omitempty"`
}

SAMLGroupLinkOutput mirrors gl.SAMLGroupLink (a saml_group_links entry).

type SAMLIdentityOutput added in v2.3.0

type SAMLIdentityOutput = toolutil.SAMLIdentityOutput

SAMLIdentityOutput mirrors gl.GroupMemberSAMLIdentity (the group_saml_identity object); canonical shape shared via toolutil.

type SearchInput

type SearchInput struct {
	Query string `json:"query" jsonschema:"Search query string,required"`
}

SearchInput defines parameters for searching groups.

type SetHookCustomHeaderInput added in v2.3.0

type SetHookCustomHeaderInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Webhook ID,required"`
	Key     string               `json:"key"      jsonschema:"Custom header key name,required"`
	Value   string               `json:"value"    jsonschema:"Custom header value (write-only),required"`
}

SetHookCustomHeaderInput defines parameters for setting a custom header on a group webhook.

type SetHookURLVariableInput added in v2.3.0

type SetHookURLVariableInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Webhook ID,required"`
	Key     string               `json:"key"      jsonschema:"URL variable key name,required"`
	Value   string               `json:"value"    jsonschema:"URL variable value (write-only),required"`
}

SetHookURLVariableInput defines parameters for setting a URL variable on a group webhook.

type ShareGroupInput added in v2.3.0

type ShareGroupInput struct {
	GroupID       toolutil.StringOrInt `json:"group_id"      jsonschema:"Group ID or URL-encoded path of the group being shared,required"`
	SharedGroupID int64                `json:"shared_group_id" jsonschema:"ID of the group to share with,required"`
	GroupAccess   int                  `` /* 142-byte string literal not displayed */
	ExpiresAt     string               `json:"expires_at,omitempty" jsonschema:"Expiration date for the share (YYYY-MM-DD)"`
	MemberRoleID  *int64               `json:"member_role_id,omitempty" jsonschema:"Custom member role ID to grant (Ultimate)"`
}

ShareGroupInput defines parameters for sharing a group with another group.

type ShareGroupOutput added in v2.3.0

type ShareGroupOutput struct {
	toolutil.HintableOutput
	Message       string `json:"message"`
	SharedGroupID int64  `json:"shared_group_id,omitempty"`
	GroupAccess   int    `json:"group_access,omitempty"`
	AccessRole    string `json:"access_role,omitempty"`
}

ShareGroupOutput holds the result of sharing a group with another group.

func ShareGroupWithGroup added in v2.3.0

func ShareGroupWithGroup(ctx context.Context, client *gitlabclient.Client, input ShareGroupInput) (ShareGroupOutput, error)

ShareGroupWithGroup shares a group with another group.

type SharedProjectsListOutput added in v2.3.0

type SharedProjectsListOutput struct {
	toolutil.HintableOutput
	Projects   []ProjectItem             `json:"projects"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

SharedProjectsListOutput holds a paginated list of projects shared with a group.

func ListSharedProjects added in v2.3.0

func ListSharedProjects(ctx context.Context, client *gitlabclient.Client, input ListSharedProjectsInput) (SharedProjectsListOutput, error)

ListSharedProjects retrieves projects shared with a group.

type SharedWithGroupOutput added in v2.3.0

type SharedWithGroupOutput struct {
	GroupID          int64  `json:"group_id"`
	GroupName        string `json:"group_name"`
	GroupFullPath    string `json:"group_full_path"`
	GroupAccessLevel int64  `json:"group_access_level"`
	ExpiresAt        string `json:"expires_at,omitempty"`
	MemberRoleID     int64  `json:"member_role_id,omitempty"`
}

SharedWithGroupOutput mirrors gl.SharedWithGroup (a shared_with_groups entry).

type SharedWithListInput added in v2.3.0

type SharedWithListInput struct {
	GroupID              toolutil.StringOrInt `json:"group_id"                 jsonschema:"Group ID or URL-encoded path,required"`
	Search               string               `json:"search,omitempty"         jsonschema:"Filter shared groups by name or path"`
	MinAccessLevel       int                  `` /* 143-byte string literal not displayed */
	Visibility           string               `json:"visibility,omitempty"     jsonschema:"Filter by visibility (public, internal, private)"`
	OrderBy              string               `json:"order_by,omitempty"       jsonschema:"Order shared groups by field (name, path, id)"`
	Sort                 string               `json:"sort,omitempty"           jsonschema:"Sort direction (asc, desc)"`
	SkipGroups           []int64              `json:"skip_groups,omitempty"    jsonschema:"Group IDs to exclude from the results"`
	WithCustomAttributes bool                 `json:"with_custom_attributes,omitempty" jsonschema:"Include custom attributes in the response"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

SharedWithListInput defines parameters for listing groups shared with a group.

type StatisticsOutput added in v2.3.0

type StatisticsOutput struct {
	CommitCount           int64 `json:"commit_count"`
	StorageSize           int64 `json:"storage_size"`
	RepositorySize        int64 `json:"repository_size"`
	WikiSize              int64 `json:"wiki_size"`
	LFSObjectsSize        int64 `json:"lfs_objects_size"`
	JobArtifactsSize      int64 `json:"job_artifacts_size"`
	PipelineArtifactsSize int64 `json:"pipeline_artifacts_size"`
	PackagesSize          int64 `json:"packages_size"`
	SnippetsSize          int64 `json:"snippets_size"`
	UploadsSize           int64 `json:"uploads_size"`
	ContainerRegistrySize int64 `json:"container_registry_size"`
}

StatisticsOutput mirrors gl.Statistics (the statistics object, returned when statistics=true is requested by an Owner).

type SubgroupsListInput

type SubgroupsListInput struct {
	GroupID              toolutil.StringOrInt `json:"group_id"                jsonschema:"Group ID or URL-encoded path,required"`
	Search               string               `json:"search,omitempty"        jsonschema:"Filter subgroups by name or path"`
	AllAvailable         bool                 `json:"all_available,omitempty" jsonschema:"Show all subgroups accessible by the authenticated user"`
	Owned                bool                 `json:"owned,omitempty"         jsonschema:"Limit to subgroups explicitly owned by the authenticated user"`
	MinAccessLevel       int                  `` /* 237-byte string literal not displayed */
	OrderBy              string               `json:"order_by,omitempty"      jsonschema:"Order subgroups by field (name, path, id, similarity)"`
	Sort                 string               `json:"sort,omitempty"          jsonschema:"Sort direction (asc, desc)"`
	Statistics           bool                 `json:"statistics,omitempty"    jsonschema:"Include group statistics (storage, counts)"`
	Visibility           string               `json:"visibility,omitempty"    jsonschema:"Filter by visibility (public, internal, private)"`
	TopLevelOnly         bool                 `json:"top_level_only,omitempty" jsonschema:"Limit to top-level subgroups (exclude nested descendants)"`
	WithCustomAttributes bool                 `json:"with_custom_attributes,omitempty" jsonschema:"Include custom attributes in the response"`
	SkipGroups           []int64              `json:"skip_groups,omitempty"   jsonschema:"Group IDs to exclude from results"`
	RepositoryStorage    string               `json:"repository_storage,omitempty" jsonschema:"Filter by repository storage shard (administrators only)"`
	Active               *bool                `json:"active,omitempty"        jsonschema:"Filter by active (true) or inactive/archived (false) subgroups"`
	Archived             *bool                `json:"archived,omitempty"      jsonschema:"Limit to archived subgroups (true) or non-archived (false)"`
	MarkedForDeletionOn  string               `json:"marked_for_deletion_on,omitempty" jsonschema:"Filter to subgroups marked for deletion on this date (YYYY-MM-DD)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

SubgroupsListInput defines parameters for listing subgroups.

type TestHookInput added in v2.3.0

type TestHookInput struct {
	GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	HookID  int64                `json:"hook_id"  jsonschema:"Webhook ID,required"`
	Trigger string               `` /* 274-byte string literal not displayed */
}

TestHookInput defines parameters for triggering a test group hook event.

type TransferInput

type TransferInput struct {
	GroupID   toolutil.StringOrInt `json:"group_id"    jsonschema:"Group ID or URL-encoded path,required"`
	ProjectID toolutil.StringOrInt `json:"project_id"  jsonschema:"Project ID or URL-encoded path to transfer,required"`
}

TransferInput defines parameters for transferring a project to a group.

type TransferLocationOutput added in v2.3.0

type TransferLocationOutput struct {
	ID        int64  `json:"id"`
	Name      string `json:"name"`
	FullName  string `json:"full_name,omitempty"`
	FullPath  string `json:"full_path,omitempty"`
	WebURL    string `json:"web_url,omitempty"`
	AvatarURL string `json:"avatar_url,omitempty"`
}

TransferLocationOutput represents a candidate parent group for a transfer.

type TransferLocationsListInput added in v2.3.0

type TransferLocationsListInput struct {
	GroupID toolutil.StringOrInt `json:"group_id"         jsonschema:"Group ID or URL-encoded path,required"`
	Search  string               `json:"search,omitempty" jsonschema:"Filter candidate parent groups by name or path"`
	OrderBy string               `json:"order_by,omitempty" jsonschema:"Order candidate parent groups by field (name, path, id)"`
	Sort    string               `json:"sort,omitempty"     jsonschema:"Sort direction (asc, desc)"`
	toolutil.PaginationInput
	toolutil.KeysetPaginationInput
}

TransferLocationsListInput defines parameters for listing possible transfer locations.

type TransferLocationsListOutput added in v2.3.0

type TransferLocationsListOutput struct {
	toolutil.HintableOutput
	Locations  []TransferLocationOutput  `json:"locations"`
	Pagination toolutil.PaginationOutput `json:"pagination"`
}

TransferLocationsListOutput holds a paginated list of transfer locations.

func TransferLocationsList added in v2.3.0

TransferLocationsList lists the parent groups available for transferring the given group.

type TransferSubGroupInput added in v2.3.0

type TransferSubGroupInput struct {
	GroupID  toolutil.StringOrInt `json:"group_id"  jsonschema:"Group ID or URL-encoded path of the group to move,required"`
	ParentID *int64               `json:"parent_id,omitempty" jsonschema:"ID of the new parent group; omit to turn the subgroup into a top-level group"`
}

TransferSubGroupInput defines parameters for transferring a group under a new parent group or to the top level.

type UnshareGroupInput added in v2.3.0

type UnshareGroupInput struct {
	GroupID       toolutil.StringOrInt `json:"group_id"        jsonschema:"Group ID or URL-encoded path of the group being unshared,required"`
	SharedGroupID int64                `json:"shared_group_id" jsonschema:"ID of the group whose share is removed,required"`
}

UnshareGroupInput defines parameters for revoking a group-to-group share.

type UpdateInput

type UpdateInput struct {
	GroupID                      toolutil.StringOrInt `json:"group_id"                jsonschema:"Group ID or URL-encoded path,required"`
	Name                         string               `json:"name,omitempty"          jsonschema:"Group name"`
	Path                         string               `json:"path,omitempty"          jsonschema:"Group URL path"`
	Description                  string               `json:"description,omitempty"   jsonschema:"Group description"`
	Visibility                   string               `json:"visibility,omitempty"    jsonschema:"Visibility level (private, internal, public)"`
	RequestAccessEnabled         *bool                `json:"request_access_enabled,omitempty" jsonschema:"Allow users to request access"`
	LFSEnabled                   *bool                `json:"lfs_enabled,omitempty"   jsonschema:"Enable Git LFS"`
	DefaultBranch                string               `json:"default_branch,omitempty" jsonschema:"Default branch name"`
	MathRenderingLimitsEnabled   *bool                `json:"math_rendering_limits_enabled,omitempty"   jsonschema:"Enable math rendering limits"`
	WebBasedCommitSigningEnabled *bool                `json:"web_based_commit_signing_enabled,omitempty" jsonschema:"Enable web-based commit signing for projects in this group"`
	AllowPersonalSnippets        *bool                `json:"allow_personal_snippets,omitempty"          jsonschema:"Allow members to create personal snippets"`

	AutoDevopsEnabled               *bool                          `json:"auto_devops_enabled,omitempty"                jsonschema:"Enable Auto DevOps for projects in this group"`
	DefaultBranchProtection         *int64                         `` /* 210-byte string literal not displayed */
	DefaultBranchProtectionDefaults *BranchProtectionDefaultsInput `json:"default_branch_protection_defaults,omitempty" jsonschema:"Default branch protection settings object"`
	DuoAvailability                 string                         `json:"duo_availability,omitempty"                   jsonschema:"GitLab Duo availability (default_on, default_off, never_on)"`
	DuoFeaturesEnabled              *bool                          `json:"duo_features_enabled,omitempty"               jsonschema:"Enable GitLab Duo features"`
	LockDuoFeaturesEnabled          *bool                          `json:"lock_duo_features_enabled,omitempty"          jsonschema:"Prevent subgroups from changing the Duo features setting"`
	EmailsEnabled                   *bool                          `json:"emails_enabled,omitempty"                     jsonschema:"Enable email notifications"`
	EmailsDisabled                  *bool                          `` /* 127-byte string literal not displayed */
	EnabledGitAccessProtocol        string                         `json:"enabled_git_access_protocol,omitempty"        jsonschema:"Allowed Git access protocol (ssh, http, all)"`
	ExperimentFeaturesEnabled       *bool                          `json:"experiment_features_enabled,omitempty"        jsonschema:"Enable experimental features"`
	ExtraSharedRunnersMinutesLimit  *int64                         `json:"extra_shared_runners_minutes_limit,omitempty" jsonschema:"Extra shared runner compute-minutes (administrators only)"`
	FileTemplateProjectID           *int64                         `` /* 134-byte string literal not displayed */
	IPRestrictionRanges             string                         `` /* 139-byte string literal not displayed */
	AllowedEmailDomainsList         string                         `` /* 141-byte string literal not displayed */
	LockMathRenderingLimitsEnabled  *bool                          `` /* 130-byte string literal not displayed */
	MaxArtifactsSize                *int64                         `json:"max_artifacts_size,omitempty"                 jsonschema:"Maximum job artifacts size in MB (administrators only)"`
	MembershipLock                  *bool                          `json:"membership_lock,omitempty"                    jsonschema:"Prevent members from being added to projects in this group"`
	MentionsDisabled                *bool                          `json:"mentions_disabled,omitempty"                  jsonschema:"Disable @-mention notifications"`
	PreventForkingOutsideGroup      *bool                          `` /* 126-byte string literal not displayed */
	PreventSharingGroupsOutside     *bool                          `json:"prevent_sharing_groups_outside_hierarchy,omitempty" jsonschema:"Prevent inviting groups outside this group's hierarchy"`
	ProjectCreationLevel            string                         `json:"project_creation_level,omitempty"             jsonschema:"Who can create projects (noone, maintainer, developer)"`
	RequireTwoFactorAuth            *bool                          `json:"require_two_factor_authentication,omitempty"  jsonschema:"Require two-factor authentication for members"`
	ShareWithGroupLock              *bool                          `json:"share_with_group_lock,omitempty"              jsonschema:"Prevent sharing projects in this group with other groups"`
	SharedRunnersMinutesLimit       *int64                         `json:"shared_runners_minutes_limit,omitempty"       jsonschema:"Shared runner compute-minutes limit (administrators only)"`
	SharedRunnersSetting            string                         `` /* 151-byte string literal not displayed */
	SubGroupCreationLevel           string                         `json:"subgroup_creation_level,omitempty"            jsonschema:"Who can create subgroups (owner, maintainer)"`
	StepUpAuthRequiredOAuthProvider string                         `json:"step_up_auth_required_oauth_provider,omitempty" jsonschema:"OAuth provider required for step-up authentication"`
	TwoFactorGracePeriod            *int64                         `` /* 131-byte string literal not displayed */
	WikiAccessLevel                 string                         `json:"wiki_access_level,omitempty"                  jsonschema:"Wiki access level (disabled, private, enabled)"`

	OnlyAllowMergeIfPipelineSucceeds          *bool `json:"only_allow_merge_if_pipeline_succeeds,omitempty"           jsonschema:"Only allow merging when the pipeline succeeds"`
	AllowMergeOnSkippedPipeline               *bool `json:"allow_merge_on_skipped_pipeline,omitempty"                jsonschema:"Allow merging when the pipeline is skipped"`
	OnlyAllowMergeIfAllDiscussionsAreResolved *bool `` /* 131-byte string literal not displayed */

	UniqueProjectDownloadLimit                  *int64   `` /* 178-byte string literal not displayed */
	UniqueProjectDownloadLimitIntervalInSeconds *int64   `` /* 169-byte string literal not displayed */
	UniqueProjectDownloadLimitAllowlist         []string `` /* 166-byte string literal not displayed */
	UniqueProjectDownloadLimitAlertlist         []int64  `` /* 177-byte string literal not displayed */
	AutoBanUserOnExcessiveProjectsDownload      *bool    `` /* 177-byte string literal not displayed */
}

UpdateInput defines parameters for updating a group.

type UploadAvatarInput added in v2.3.0

type UploadAvatarInput struct {
	GroupID       toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
	Filename      string               `json:"filename" jsonschema:"Avatar filename (e.g. avatar.png),required"`
	FilePath      string               `` /* 233-byte string literal not displayed */
	ContentBase64 string               `` /* 134-byte string literal not displayed */
}

UploadAvatarInput defines parameters for uploading a group avatar.

Exactly one of FilePath or ContentBase64 must be provided to supply the image bytes. This mirrors the project avatar upload tool: file_path reads a local file from the MCP server filesystem (suitable for large images), while content_base64 carries inline base64-encoded image content.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL