Documentation
¶
Overview ¶
Package mergerequests implements MCP tools for GitLab merge request operations.
The package covers merge request create, get, list, update, merge, rebase, close, reopen, reviewer and assignee metadata, branch relationships, squash and source-branch cleanup flags, and workflow helpers used by catalog-backed meta and dynamic surfaces. Related domains provide approvals, changes, context commits, discussions, draft notes, notes, and merge trains.
GitLab API References ¶
The primary API backing this package is:
Index ¶
- func ActionSpecs(client *gitlabclient.Client) []toolutil.ActionSpec
- func CreatePipeline(ctx context.Context, client *gitlabclient.Client, input CreatePipelineInput) (pipelines.Output, error)
- func Delete(ctx context.Context, client *gitlabclient.Client, input DeleteInput) error
- func DeleteDependency(ctx context.Context, client *gitlabclient.Client, input DeleteDependencyInput) error
- func DeleteDependencyOutput(ctx context.Context, client *gitlabclient.Client, input DeleteDependencyInput) (toolutil.DeleteOutput, error)
- func DeleteOutput(ctx context.Context, client *gitlabclient.Client, input DeleteInput) (toolutil.DeleteOutput, error)
- func FormatApproveMarkdown(a ApproveOutput) string
- func FormatCommitsMarkdown(out CommitsOutput) string
- func FormatCreatePipelineMarkdown(p pipelines.Output) string
- func FormatCreateTodoMarkdown(t CreateTodoOutput) string
- func FormatDependenciesMarkdown(out DependenciesOutput) string
- func FormatDependencyMarkdown(d DependencyOutput) string
- func FormatIssuesClosedMarkdown(out IssuesClosedOutput) string
- func FormatListMarkdown(out ListOutput) string
- func FormatMarkdown(mr Output) string
- func FormatParticipantsMarkdown(out ParticipantsOutput) string
- func FormatPipelinesMarkdown(out PipelinesOutput) string
- func FormatRebaseMarkdown(r RebaseOutput) string
- func FormatRelatedIssuesMarkdown(out RelatedIssuesOutput) string
- func FormatReviewersMarkdown(out ReviewersOutput) string
- func FormatTimeStatsMarkdown(ts TimeStatsOutput) string
- func Unapprove(ctx context.Context, client *gitlabclient.Client, input ApproveInput) error
- func UnapproveOutput(ctx context.Context, client *gitlabclient.Client, input ApproveInput) (toolutil.DeleteOutput, error)
- type AddSpentTimeInput
- type ApproveInput
- type ApproveOutput
- type CommitsInput
- type CommitsOutput
- type CreateInput
- type CreatePipelineInput
- type CreateTodoInput
- type CreateTodoOutput
- type DeleteDependencyInput
- type DeleteInput
- type DependenciesOutput
- type DependencyInput
- type DependencyOutput
- type DiffRefsOutput
- type GetDependenciesInput
- type GetInput
- type IssuesClosedInput
- type IssuesClosedOutput
- type ListGlobalInput
- type ListGroupInput
- type ListInput
- type ListOutput
- func List(ctx context.Context, client *gitlabclient.Client, input ListInput) (ListOutput, error)
- func ListGlobal(ctx context.Context, client *gitlabclient.Client, input ListGlobalInput) (ListOutput, error)
- func ListGroup(ctx context.Context, client *gitlabclient.Client, input ListGroupInput) (ListOutput, error)
- type MergeInput
- type Output
- func BasicToOutput(m *gl.BasicMergeRequest) Output
- func CancelAutoMerge(ctx context.Context, client *gitlabclient.Client, input GetInput) (Output, error)
- func Create(ctx context.Context, client *gitlabclient.Client, input CreateInput) (Output, error)
- func Get(ctx context.Context, client *gitlabclient.Client, input GetInput) (Output, error)
- func Merge(ctx context.Context, client *gitlabclient.Client, input MergeInput) (Output, error)
- func Subscribe(ctx context.Context, client *gitlabclient.Client, input GetInput) (Output, error)
- func ToOutput(m *gl.MergeRequest) Output
- func Unsubscribe(ctx context.Context, client *gitlabclient.Client, input GetInput) (Output, error)
- func Update(ctx context.Context, client *gitlabclient.Client, input UpdateInput) (Output, error)
- type ParticipantOutput
- type ParticipantsInput
- type ParticipantsOutput
- type PipelinesInput
- type PipelinesOutput
- type RebaseInput
- type RebaseOutput
- type RelatedIssuesInput
- type RelatedIssuesOutput
- type ReviewerOutput
- type ReviewersOutput
- type SetTimeEstimateInput
- type TimeStatsOutput
- func AddSpentTime(ctx context.Context, client *gitlabclient.Client, input AddSpentTimeInput) (TimeStatsOutput, error)
- func GetTimeStats(ctx context.Context, client *gitlabclient.Client, input GetInput) (TimeStatsOutput, error)
- func ResetSpentTime(ctx context.Context, client *gitlabclient.Client, input GetInput) (TimeStatsOutput, error)
- func ResetTimeEstimate(ctx context.Context, client *gitlabclient.Client, input GetInput) (TimeStatsOutput, error)
- func SetTimeEstimate(ctx context.Context, client *gitlabclient.Client, input SetTimeEstimateInput) (TimeStatsOutput, error)
- type UpdateInput
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 merge request actions.
func CreatePipeline ¶
func CreatePipeline(ctx context.Context, client *gitlabclient.Client, input CreatePipelineInput) (pipelines.Output, error)
CreatePipeline triggers a new pipeline for the specified merge request.
func Delete ¶
func Delete(ctx context.Context, client *gitlabclient.Client, input DeleteInput) error
Delete permanently deletes a merge request.
func DeleteDependency ¶
func DeleteDependency(ctx context.Context, client *gitlabclient.Client, input DeleteDependencyInput) error
DeleteDependency removes a dependency (blocker) from a merge request.
func DeleteDependencyOutput ¶
func DeleteDependencyOutput(ctx context.Context, client *gitlabclient.Client, input DeleteDependencyInput) (toolutil.DeleteOutput, error)
DeleteDependencyOutput removes a merge request dependency and returns the legacy success message shape.
func DeleteOutput ¶
func DeleteOutput(ctx context.Context, client *gitlabclient.Client, input DeleteInput) (toolutil.DeleteOutput, error)
DeleteOutput deletes a merge request and returns the legacy success message shape.
func FormatApproveMarkdown ¶
func FormatApproveMarkdown(a ApproveOutput) string
FormatApproveMarkdown renders the MR approval status as Markdown.
func FormatCommitsMarkdown ¶
func FormatCommitsMarkdown(out CommitsOutput) string
FormatCommitsMarkdown renders a paginated list of MR commits as a Markdown table.
func FormatCreatePipelineMarkdown ¶
FormatCreatePipelineMarkdown renders a single pipeline (from create-pipeline) as Markdown.
func FormatCreateTodoMarkdown ¶
func FormatCreateTodoMarkdown(t CreateTodoOutput) string
FormatCreateTodoMarkdown renders a created to-do item as markdown.
func FormatDependenciesMarkdown ¶
func FormatDependenciesMarkdown(out DependenciesOutput) string
FormatDependenciesMarkdown renders a list of merge request dependencies as markdown.
func FormatDependencyMarkdown ¶
func FormatDependencyMarkdown(d DependencyOutput) string
FormatDependencyMarkdown renders a single merge request dependency as markdown.
func FormatIssuesClosedMarkdown ¶
func FormatIssuesClosedMarkdown(out IssuesClosedOutput) string
FormatIssuesClosedMarkdown renders the issues-closed-on-merge list as a Markdown table.
func FormatListMarkdown ¶
func FormatListMarkdown(out ListOutput) string
FormatListMarkdown renders a list of merge requests as a Markdown table.
func FormatMarkdown ¶
FormatMarkdown renders a single merge request as a Markdown summary.
func FormatParticipantsMarkdown ¶
func FormatParticipantsMarkdown(out ParticipantsOutput) string
FormatParticipantsMarkdown renders MR participants as a Markdown table.
func FormatPipelinesMarkdown ¶
func FormatPipelinesMarkdown(out PipelinesOutput) string
FormatPipelinesMarkdown renders a list of MR pipelines as a Markdown table.
func FormatRebaseMarkdown ¶
func FormatRebaseMarkdown(r RebaseOutput) string
FormatRebaseMarkdown renders a rebase result as a short Markdown message.
func FormatRelatedIssuesMarkdown ¶
func FormatRelatedIssuesMarkdown(out RelatedIssuesOutput) string
FormatRelatedIssuesMarkdown renders related issues as markdown.
func FormatReviewersMarkdown ¶
func FormatReviewersMarkdown(out ReviewersOutput) string
FormatReviewersMarkdown renders MR reviewers as a Markdown table.
func FormatTimeStatsMarkdown ¶
func FormatTimeStatsMarkdown(ts TimeStatsOutput) string
FormatTimeStatsMarkdown renders time tracking statistics as markdown.
func Unapprove ¶
func Unapprove(ctx context.Context, client *gitlabclient.Client, input ApproveInput) error
Unapprove removes the current user's approval from the specified merge request. Returns an error if the API call fails.
func UnapproveOutput ¶
func UnapproveOutput(ctx context.Context, client *gitlabclient.Client, input ApproveInput) (toolutil.DeleteOutput, error)
UnapproveOutput removes approval from a merge request and returns the legacy success message shape.
Types ¶
type AddSpentTimeInput ¶
type AddSpentTimeInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
Duration string `json:"duration" jsonschema:"Human-readable duration (e.g. 1h, 30m, 1w2d),required"`
Summary string `json:"summary,omitempty" jsonschema:"Optional summary of work done"`
}
AddSpentTimeInput defines parameters for adding spent time to an MR.
type ApproveInput ¶
type ApproveInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
ApproveInput defines parameters for approving a merge request.
type ApproveOutput ¶
type ApproveOutput struct {
toolutil.HintableOutput
ApprovalsRequired int `json:"approvals_required"`
ApprovedBy int `json:"approved_by_count"`
Approved bool `json:"approved"`
}
ApproveOutput holds the approval state after approve/unapprove.
func Approve ¶
func Approve(ctx context.Context, client *gitlabclient.Client, input ApproveInput) (ApproveOutput, error)
Approve adds an approval to the specified merge request and returns the updated approval state including required count, approved-by count, and overall approved status.
type CommitsInput ¶
type CommitsInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
toolutil.PaginationInput
}
CommitsInput defines parameters for listing commits in a merge request.
type CommitsOutput ¶
type CommitsOutput struct {
toolutil.HintableOutput
Commits []commits.Output `json:"commits"`
Pagination toolutil.PaginationOutput `json:"pagination"`
}
CommitsOutput holds a paginated list of commits for a merge request.
func Commits ¶
func Commits(ctx context.Context, client *gitlabclient.Client, input CommitsInput) (CommitsOutput, error)
Commits retrieves the list of commits in a merge request.
type CreateInput ¶
type CreateInput struct {
// Basic metadata
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
SourceBranch string `json:"source_branch" jsonschema:"Source branch name,required"`
TargetBranch string `` /* 167-byte string literal not displayed */
Title string `json:"title" jsonschema:"Merge request title,required"`
Description string `json:"description,omitempty" jsonschema:"Merge request description (Markdown supported)"`
// Assignment and tracking
AssigneeID int64 `json:"assignee_id,omitempty" jsonschema:"Single user ID to assign (use assignee_ids for multiple)"`
AssigneeIDs []int64 `json:"assignee_ids,omitempty" jsonschema:"User IDs to assign"`
ReviewerIDs []int64 `json:"reviewer_ids,omitempty" jsonschema:"User IDs to add as reviewers"`
Labels string `json:"labels,omitempty" jsonschema:"Comma-separated labels to apply"`
MilestoneID int64 `json:"milestone_id,omitempty" jsonschema:"Milestone ID to associate with the merge request"`
// Merge behavior
RemoveSourceBranch *bool `` /* 167-byte string literal not displayed */
Squash *bool `` /* 144-byte string literal not displayed */
AllowCollaboration *bool `json:"allow_collaboration,omitempty" jsonschema:"Allow commits from upstream members who can merge to target branch"`
// Cross-project
TargetProjectID int64 `json:"target_project_id,omitempty" jsonschema:"Target project ID (for cross-project/fork MRs)"`
}
CreateInput defines parameters for creating a merge request.
type CreatePipelineInput ¶
type CreatePipelineInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
CreatePipelineInput defines parameters for creating a pipeline for a merge request.
type CreateTodoInput ¶
type CreateTodoInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
CreateTodoInput defines parameters for creating a to-do item on a merge request.
type CreateTodoOutput ¶
type CreateTodoOutput struct {
toolutil.HintableOutput
ID int64 `json:"id"`
ActionName string `json:"action_name"`
TargetType string `json:"target_type"`
TargetTitle string `json:"target_title"`
TargetURL string `json:"target_url"`
State string `json:"state"`
ProjectName string `json:"project_name,omitempty"`
CreatedAt string `json:"created_at,omitempty"`
}
CreateTodoOutput holds the created to-do item details.
func CreateTodo ¶
func CreateTodo(ctx context.Context, client *gitlabclient.Client, input CreateTodoInput) (CreateTodoOutput, error)
CreateTodo creates a to-do item on the specified merge request for the authenticated user. Returns the created to-do item details.
type DeleteDependencyInput ¶
type DeleteDependencyInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
BlockingMergeRequestID int64 `json:"blocking_merge_request_id" jsonschema:"ID of the blocking merge request to remove"`
}
DeleteDependencyInput defines parameters for deleting a merge request dependency.
type DeleteInput ¶
type DeleteInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID to delete (project-scoped, not 'merge_request_id'),required"`
}
DeleteInput defines parameters for deleting a merge request.
type DependenciesOutput ¶
type DependenciesOutput struct {
toolutil.HintableOutput
Dependencies []DependencyOutput `json:"dependencies"`
}
DependenciesOutput holds a list of merge request dependencies.
func GetDependencies ¶
func GetDependencies(ctx context.Context, client *gitlabclient.Client, input GetDependenciesInput) (DependenciesOutput, error)
GetDependencies retrieves all dependencies (blockers) for a merge request.
type DependencyInput ¶
type DependencyInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
BlockingMergeRequestID int64 `json:"blocking_merge_request_id" jsonschema:"ID of the merge request that blocks this one"`
}
DependencyInput defines parameters for creating a merge request dependency.
type DependencyOutput ¶
type DependencyOutput struct {
toolutil.HintableOutput
ID int64 `json:"id"`
BlockingMRID int64 `json:"blocking_merge_request_id"`
BlockingMRIID int64 `json:"blocking_merge_request_iid"`
BlockingMRTitle string `json:"blocking_merge_request_title"`
BlockingMRState string `json:"blocking_merge_request_state"`
BlockingMRProjectID int64 `json:"blocking_merge_request_project_id"`
BlockingSourceBranch string `json:"blocking_source_branch"`
BlockingTargetBranch string `json:"blocking_target_branch"`
ProjectID int64 `json:"project_id"`
}
DependencyOutput represents a merge request dependency.
func CreateDependency ¶
func CreateDependency(ctx context.Context, client *gitlabclient.Client, input DependencyInput) (DependencyOutput, error)
CreateDependency creates a new dependency (blocker) on a merge request.
type DiffRefsOutput ¶
type DiffRefsOutput struct {
BaseSHA string `json:"base_sha"`
HeadSHA string `json:"head_sha"`
StartSHA string `json:"start_sha"`
}
DiffRefsOutput represents the diff refs (base, head, start SHAs) of a merge request.
type GetDependenciesInput ¶
type GetDependenciesInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
GetDependenciesInput defines parameters for listing merge request dependencies.
type GetInput ¶
type GetInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
GetInput defines parameters for retrieving a merge request.
type IssuesClosedInput ¶
type IssuesClosedInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
toolutil.PaginationInput
}
IssuesClosedInput defines parameters for listing issues that close on merge.
type IssuesClosedOutput ¶
type IssuesClosedOutput struct {
toolutil.HintableOutput
Issues []issues.Output `json:"issues"`
Pagination toolutil.PaginationOutput `json:"pagination"`
}
IssuesClosedOutput holds the list of issues that would be closed by merging an MR.
func IssuesClosed ¶
func IssuesClosed(ctx context.Context, client *gitlabclient.Client, input IssuesClosedInput) (IssuesClosedOutput, error)
IssuesClosed retrieves the list of issues that would be closed when the specified merge request is merged.
type ListGlobalInput ¶
type ListGlobalInput struct {
State string `json:"state,omitempty" jsonschema:"Filter by state (opened, closed, merged, all)"`
Labels string `json:"labels,omitempty" jsonschema:"Comma-separated label names to filter by"`
NotLabels string `json:"not_labels,omitempty" jsonschema:"Comma-separated label names to exclude"`
Milestone string `json:"milestone,omitempty" jsonschema:"Milestone title to filter by"`
Scope string `json:"scope,omitempty" jsonschema:"Filter by scope (created_by_me, assigned_to_me, all)"`
Search string `json:"search,omitempty" jsonschema:"Search in title and description"`
SourceBranch string `json:"source_branch,omitempty" jsonschema:"Filter by source branch name"`
TargetBranch string `json:"target_branch,omitempty" jsonschema:"Filter by target branch name"`
AuthorUsername string `json:"author_username,omitempty" jsonschema:"Filter by author username"`
ReviewerUsername string `json:"reviewer_username,omitempty" jsonschema:"Filter by reviewer username"`
Draft *bool `json:"draft,omitempty" jsonschema:"Filter by draft status (true=only drafts, false=only non-drafts)"`
CreatedAfter string `json:"created_after,omitempty" jsonschema:"Return MRs created after date (ISO 8601)"`
CreatedBefore string `json:"created_before,omitempty" jsonschema:"Return MRs created before date (ISO 8601)"`
UpdatedAfter string `json:"updated_after,omitempty" jsonschema:"Return MRs updated after date (ISO 8601)"`
UpdatedBefore string `json:"updated_before,omitempty" jsonschema:"Return MRs updated before date (ISO 8601)"`
OrderBy string `json:"order_by,omitempty" jsonschema:"Order by field (created_at, updated_at)"`
Sort string `json:"sort,omitempty" jsonschema:"Sort direction (asc, desc)"`
toolutil.PaginationInput
}
ListGlobalInput defines filters for listing merge requests across all projects.
type ListGroupInput ¶
type ListGroupInput struct {
GroupID toolutil.StringOrInt `json:"group_id" jsonschema:"Group ID or URL-encoded path,required"`
State string `json:"state,omitempty" jsonschema:"Filter by state (opened, closed, merged, all)"`
Labels string `json:"labels,omitempty" jsonschema:"Comma-separated label names to filter by"`
NotLabels string `json:"not_labels,omitempty" jsonschema:"Comma-separated label names to exclude"`
Milestone string `json:"milestone,omitempty" jsonschema:"Milestone title to filter by"`
Scope string `json:"scope,omitempty" jsonschema:"Filter by scope (created_by_me, assigned_to_me, all)"`
Search string `json:"search,omitempty" jsonschema:"Search in title and description"`
SourceBranch string `json:"source_branch,omitempty" jsonschema:"Filter by source branch name"`
TargetBranch string `json:"target_branch,omitempty" jsonschema:"Filter by target branch name"`
AuthorUsername string `json:"author_username,omitempty" jsonschema:"Filter by author username"`
ReviewerUsername string `json:"reviewer_username,omitempty" jsonschema:"Filter by reviewer username"`
Draft *bool `json:"draft,omitempty" jsonschema:"Filter by draft status (true=only drafts, false=only non-drafts)"`
CreatedAfter string `json:"created_after,omitempty" jsonschema:"Return MRs created after date (ISO 8601)"`
CreatedBefore string `json:"created_before,omitempty" jsonschema:"Return MRs created before date (ISO 8601)"`
UpdatedAfter string `json:"updated_after,omitempty" jsonschema:"Return MRs updated after date (ISO 8601)"`
UpdatedBefore string `json:"updated_before,omitempty" jsonschema:"Return MRs updated before date (ISO 8601)"`
OrderBy string `json:"order_by,omitempty" jsonschema:"Order by field (created_at, updated_at)"`
Sort string `json:"sort,omitempty" jsonschema:"Sort direction (asc, desc)"`
toolutil.PaginationInput
}
ListGroupInput defines filters for listing merge requests in a group.
type ListInput ¶
type ListInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
State string `json:"state,omitempty" jsonschema:"Filter by state (opened, closed, merged, all)"`
Labels string `json:"labels,omitempty" jsonschema:"Comma-separated label names to filter by"`
NotLabels string `json:"not_labels,omitempty" jsonschema:"Comma-separated label names to exclude"`
Milestone string `json:"milestone,omitempty" jsonschema:"Milestone title to filter by"`
Scope string `json:"scope,omitempty" jsonschema:"Filter by scope (created_by_me, assigned_to_me, all)"`
Search string `json:"search,omitempty" jsonschema:"Search in title and description"`
SourceBranch string `json:"source_branch,omitempty" jsonschema:"Filter by source branch name"`
TargetBranch string `json:"target_branch,omitempty" jsonschema:"Filter by target branch name"`
AuthorUsername string `json:"author_username,omitempty" jsonschema:"Filter by author username"`
Draft *bool `json:"draft,omitempty" jsonschema:"Filter by draft status (true=only drafts, false=only non-drafts)"`
IIDs []int64 `json:"iids,omitempty" jsonschema:"Filter by merge request internal IDs"`
CreatedAfter string `json:"created_after,omitempty" jsonschema:"Return MRs created after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)"`
CreatedBefore string `json:"created_before,omitempty" jsonschema:"Return MRs created before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)"`
UpdatedAfter string `json:"updated_after,omitempty" jsonschema:"Return MRs updated after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)"`
UpdatedBefore string `json:"updated_before,omitempty" jsonschema:"Return MRs updated before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)"`
OrderBy string `json:"order_by,omitempty" jsonschema:"Order by field (created_at, updated_at, title)"`
Sort string `json:"sort,omitempty" jsonschema:"Sort direction (asc, desc)"`
toolutil.PaginationInput
}
ListInput defines filters for listing merge requests.
type ListOutput ¶
type ListOutput struct {
toolutil.HintableOutput
MergeRequests []Output `json:"merge_requests"`
Pagination toolutil.PaginationOutput `json:"pagination"`
}
ListOutput holds a paginated list of merge requests.
func List ¶
func List(ctx context.Context, client *gitlabclient.Client, input ListInput) (ListOutput, error)
List returns a paginated list of merge requests for a project. Results can be filtered by state and search terms, and ordered by the specified field and direction.
func ListGlobal ¶
func ListGlobal(ctx context.Context, client *gitlabclient.Client, input ListGlobalInput) (ListOutput, error)
ListGlobal returns a paginated list of merge requests across all projects visible to the authenticated user.
func ListGroup ¶
func ListGroup(ctx context.Context, client *gitlabclient.Client, input ListGroupInput) (ListOutput, error)
ListGroup returns a paginated list of merge requests in a group.
type MergeInput ¶
type MergeInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `` /* 138-byte string literal not displayed */
MergeCommitMessage string `json:"merge_commit_message,omitempty" jsonschema:"Custom merge commit message"`
Squash *bool `` /* 168-byte string literal not displayed */
ShouldRemoveSourceBranch *bool `` /* 176-byte string literal not displayed */
AutoMerge *bool `json:"auto_merge,omitempty" jsonschema:"Automatically merge when pipeline succeeds (auto-merge)"`
SHA string `` /* 136-byte string literal not displayed */
SquashCommitMessage string `json:"squash_commit_message,omitempty" jsonschema:"Custom squash commit message (used when squash is enabled)"`
}
MergeInput defines parameters for merging a merge request.
type Output ¶
type Output struct {
toolutil.HintableOutput
ID int64 `json:"id"`
IID int64 `json:"merge_request_iid"`
ProjectID int64 `json:"project_id"`
ProjectPath string `json:"project_path,omitempty"`
SourceProjectID int64 `json:"source_project_id,omitempty"`
TargetProjectID int64 `json:"target_project_id,omitempty"`
Title string `json:"title"`
Description string `json:"description"`
State string `json:"state"`
SourceBranch string `json:"source_branch"`
TargetBranch string `json:"target_branch"`
WebURL string `json:"web_url"`
MergeStatus string `json:"merge_status"`
Draft bool `json:"draft"`
HasConflicts bool `json:"has_conflicts"`
BlockingDiscussionsResolved bool `json:"blocking_discussions_resolved"`
Squash bool `json:"squash,omitempty"`
SquashOnMerge bool `json:"squash_on_merge,omitempty"`
MergeWhenPipelineSucceeds bool `json:"merge_when_pipeline_succeeds,omitempty"`
ShouldRemoveSourceBranch bool `json:"should_remove_source_branch,omitempty"`
DiscussionLocked bool `json:"discussion_locked"`
RebaseInProgress bool `json:"rebase_in_progress,omitempty"`
Author string `json:"author,omitempty"`
MergedBy string `json:"merged_by,omitempty"`
Assignees []string `json:"assignees"`
Reviewers []string `json:"reviewers"`
Labels []string `json:"labels"`
Milestone string `json:"milestone,omitempty"`
References string `json:"references,omitempty"`
SHA string `json:"sha,omitempty"`
MergeCommitSHA string `json:"merge_commit_sha,omitempty"`
MergeError string `json:"merge_error,omitempty"`
ChangesCount string `json:"changes_count,omitempty"`
DivergedCommitsCount int64 `json:"diverged_commits_count,omitempty"`
Upvotes int64 `json:"upvotes,omitempty"`
Downvotes int64 `json:"downvotes,omitempty"`
SquashCommitSHA string `json:"squash_commit_sha,omitempty"`
ForceRemoveSourceBranch bool `json:"force_remove_source_branch,omitempty"`
AllowCollaboration bool `json:"allow_collaboration,omitempty"`
ClosedBy string `json:"closed_by,omitempty"`
MergeAfter string `json:"merge_after,omitempty"`
TaskCompletionCount int64 `json:"task_completion_count,omitempty"`
TaskCompletionTotal int64 `json:"task_completion_total,omitempty"`
TimeEstimate int64 `json:"time_estimate,omitempty"`
TotalTimeSpent int64 `json:"total_time_spent,omitempty"`
Subscribed bool `json:"subscribed,omitempty"`
FirstContribution bool `json:"first_contribution,omitempty"`
DiffRefs *DiffRefsOutput `json:"diff_refs,omitempty"`
PipelineID int64 `json:"pipeline_id,omitempty"`
PipelineWebURL string `json:"pipeline_web_url,omitempty"`
PipelineName string `json:"pipeline_name,omitempty"`
HeadPipelineID int64 `json:"head_pipeline_id,omitempty"`
LatestBuildStartedAt string `json:"latest_build_started_at,omitempty"`
LatestBuildFinishedAt string `json:"latest_build_finished_at,omitempty"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
MergedAt string `json:"merged_at,omitempty"`
ClosedAt string `json:"closed_at,omitempty"`
PreparedAt string `json:"prepared_at,omitempty"`
UserNotesCount int64 `json:"user_notes_count,omitempty"`
}
Output represents a merge request.
func BasicToOutput ¶
func BasicToOutput(m *gl.BasicMergeRequest) Output
BasicToOutput converts a GitLab API gl.BasicMergeRequest to the MCP tool output format. BasicMergeRequest is used in list endpoints that return a lighter payload than the full MergeRequest object.
func CancelAutoMerge ¶
func CancelAutoMerge(ctx context.Context, client *gitlabclient.Client, input GetInput) (Output, error)
CancelAutoMerge cancels the "merge when pipeline succeeds" (auto-merge) setting on a merge request. Returns the updated merge request.
func Create ¶
func Create(ctx context.Context, client *gitlabclient.Client, input CreateInput) (Output, error)
Create creates a new merge request in the specified GitLab project. It maps optional fields (description, assignees, reviewers, labels, squash) only when provided. Returns the created merge request details.
func Get ¶
Get retrieves a single merge request by its internal ID within a project. Returns an error if the merge request does not exist.
func Merge ¶
func Merge(ctx context.Context, client *gitlabclient.Client, input MergeInput) (Output, error)
Merge accepts (merges) a merge request. When squash or should_remove_source_branch are not explicitly set by the caller, the function pre-fetches the MR to detect project-level requirements (squash_on_merge, force_remove_source_branch) and applies them automatically, avoiding merge rejections from enforced settings.
func Subscribe ¶
Subscribe subscribes the authenticated user to the given merge request to receive notifications. Returns the updated merge request.
func ToOutput ¶
func ToOutput(m *gl.MergeRequest) Output
ToOutput converts a GitLab API gl.MergeRequest to the MCP tool output format.
func Unsubscribe ¶
Unsubscribe unsubscribes the authenticated user from the given merge request. Returns the updated merge request.
func Update ¶
func Update(ctx context.Context, client *gitlabclient.Client, input UpdateInput) (Output, error)
Update modifies an existing merge request. Only non-zero fields in the input are applied, allowing partial updates such as changing the title, description, target branch, assignees, reviewers, or triggering a state transition (close/reopen).
type ParticipantOutput ¶
type ParticipantOutput struct {
ID int64 `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
State string `json:"state"`
AvatarURL string `json:"avatar_url,omitempty"`
WebURL string `json:"web_url,omitempty"`
}
ParticipantOutput represents a single MR participant.
type ParticipantsInput ¶
type ParticipantsInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
ParticipantsInput defines parameters for listing MR participants.
type ParticipantsOutput ¶
type ParticipantsOutput struct {
toolutil.HintableOutput
Participants []ParticipantOutput `json:"participants"`
}
ParticipantsOutput holds the list of participants for a merge request.
func Participants ¶
func Participants(ctx context.Context, client *gitlabclient.Client, input ParticipantsInput) (ParticipantsOutput, error)
Participants retrieves the list of users who participated in a merge request.
type PipelinesInput ¶
type PipelinesInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
}
PipelinesInput defines parameters for listing pipelines of a merge request.
type PipelinesOutput ¶
type PipelinesOutput struct {
toolutil.HintableOutput
Pipelines []pipelines.Output `json:"pipelines"`
}
PipelinesOutput holds the list of pipelines for a merge request.
func Pipelines ¶
func Pipelines(ctx context.Context, client *gitlabclient.Client, input PipelinesInput) (PipelinesOutput, error)
Pipelines retrieves the list of pipelines for a merge request.
type RebaseInput ¶
type RebaseInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `` /* 126-byte string literal not displayed */
SkipCI bool `json:"skip_ci,omitempty" jsonschema:"Skip triggering CI pipeline after rebase"`
}
RebaseInput defines parameters for rebasing a merge request.
type RebaseOutput ¶
type RebaseOutput struct {
toolutil.HintableOutput
RebaseInProgress bool `json:"rebase_in_progress"`
}
RebaseOutput represents the result of a rebase operation.
func Rebase ¶
func Rebase(ctx context.Context, client *gitlabclient.Client, input RebaseInput) (RebaseOutput, error)
Rebase triggers a rebase of the merge request's source branch.
type RelatedIssuesInput ¶
type RelatedIssuesInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
toolutil.PaginationInput
}
RelatedIssuesInput defines parameters for listing issues related to an MR.
type RelatedIssuesOutput ¶
type RelatedIssuesOutput struct {
toolutil.HintableOutput
Issues []issues.Output `json:"issues"`
Pagination toolutil.PaginationOutput `json:"pagination"`
}
RelatedIssuesOutput holds the list of issues related to a merge request.
func RelatedIssues ¶
func RelatedIssues(ctx context.Context, client *gitlabclient.Client, input RelatedIssuesInput) (RelatedIssuesOutput, error)
RelatedIssues retrieves the list of issues related to a merge request.
type ReviewerOutput ¶
type ReviewerOutput struct {
ID int64 `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
State string `json:"state"`
AvatarURL string `json:"avatar_url,omitempty"`
WebURL string `json:"web_url,omitempty"`
Review string `json:"review_state,omitempty"`
CreatedAt string `json:"created_at,omitempty"`
}
ReviewerOutput represents a single MR reviewer with review state.
type ReviewersOutput ¶
type ReviewersOutput struct {
toolutil.HintableOutput
Reviewers []ReviewerOutput `json:"reviewers"`
}
ReviewersOutput holds the list of reviewers for a merge request.
func Reviewers ¶
func Reviewers(ctx context.Context, client *gitlabclient.Client, input ParticipantsInput) (ReviewersOutput, error)
Reviewers retrieves the list of reviewers assigned to a merge request.
type SetTimeEstimateInput ¶
type SetTimeEstimateInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `json:"merge_request_iid" jsonschema:"Merge request IID (project-scoped, not 'merge_request_id'),required"`
Duration string `json:"duration" jsonschema:"Human-readable duration (e.g. 3h30m, 1w2d),required"`
}
SetTimeEstimateInput defines parameters for setting a time estimate on an MR.
type TimeStatsOutput ¶
type TimeStatsOutput struct {
toolutil.HintableOutput
HumanTimeEstimate string `json:"human_time_estimate"`
HumanTotalTimeSpent string `json:"human_total_time_spent"`
TimeEstimate int64 `json:"time_estimate"`
TotalTimeSpent int64 `json:"total_time_spent"`
}
TimeStatsOutput represents time tracking statistics for a merge request.
func AddSpentTime ¶
func AddSpentTime(ctx context.Context, client *gitlabclient.Client, input AddSpentTimeInput) (TimeStatsOutput, error)
AddSpentTime adds spent time for a merge request.
func GetTimeStats ¶
func GetTimeStats(ctx context.Context, client *gitlabclient.Client, input GetInput) (TimeStatsOutput, error)
GetTimeStats retrieves total time tracking statistics for a merge request.
func ResetSpentTime ¶
func ResetSpentTime(ctx context.Context, client *gitlabclient.Client, input GetInput) (TimeStatsOutput, error)
ResetSpentTime resets the total spent time for a merge request.
func ResetTimeEstimate ¶
func ResetTimeEstimate(ctx context.Context, client *gitlabclient.Client, input GetInput) (TimeStatsOutput, error)
ResetTimeEstimate resets the time estimate for a merge request.
func SetTimeEstimate ¶
func SetTimeEstimate(ctx context.Context, client *gitlabclient.Client, input SetTimeEstimateInput) (TimeStatsOutput, error)
SetTimeEstimate sets the time estimate for a merge request.
type UpdateInput ¶
type UpdateInput struct {
ProjectID toolutil.StringOrInt `json:"project_id" jsonschema:"Project ID or URL-encoded path,required"`
MRIID int64 `` /* 128-byte string literal not displayed */
Title string `json:"title,omitempty" jsonschema:"New title"`
Description string `json:"description,omitempty" jsonschema:"New description"`
TargetBranch string `json:"target_branch,omitempty" jsonschema:"New target branch"`
AssigneeID int64 `json:"assignee_id,omitempty" jsonschema:"Single user ID to assign (use assignee_ids for multiple)"`
AssigneeIDs []int64 `json:"assignee_ids,omitempty" jsonschema:"User IDs to assign as merge request assignees"`
ReviewerIDs []int64 `json:"reviewer_ids,omitempty" jsonschema:"User IDs to add as reviewers"`
Labels string `json:"labels,omitempty" jsonschema:"Comma-separated label names to replace all labels on the merge request"`
AddLabels string `json:"add_labels,omitempty" jsonschema:"Comma-separated label names to add without removing existing"`
RemoveLabels string `json:"remove_labels,omitempty" jsonschema:"Comma-separated label names to remove"`
MilestoneID int64 `json:"milestone_id,omitempty" jsonschema:"Milestone ID (0 to unset)"`
RemoveSourceBranch *bool `json:"remove_source_branch,omitempty" jsonschema:"Delete source branch after merge. Only set if explicitly requested"`
Squash *bool `json:"squash,omitempty" jsonschema:"Squash commits on merge. Only set if explicitly requested"`
DiscussionLocked *bool `json:"discussion_locked,omitempty" jsonschema:"Lock discussions on the merge request"`
AllowCollaboration *bool `json:"allow_collaboration,omitempty" jsonschema:"Allow commits from upstream members who can merge to target branch"`
StateEvent string `json:"state_event,omitempty" jsonschema:"State transition (close, reopen)"`
}
UpdateInput defines parameters for updating a merge request.