@gohcltech/bitbucket-mcp
Version:
Bitbucket integration for Claude via Model Context Protocol
357 lines • 12 kB
JavaScript
/**
* @fileoverview Type definitions for v2.1 consolidated tools.
*
* This module defines all TypeScript types and Zod schemas for the 12 consolidated tools
* using discriminated unions for type-safe action routing.
*
* Each consolidated tool has:
* - Action type union (e.g., WorkspaceAction = 'list' | 'get')
* - Base argument interface with action field
* - Action-specific interfaces extending base (discriminated unions)
* - Union type combining all action variants
* - Zod schema for runtime validation
*
* This ensures full type safety and runtime validation for all tool operations.
*/
import { z } from 'zod';
/** Zod schema for workspace management arguments */
export const ManageWorkspacesArgsSchema = z.discriminatedUnion('action', [
z.object({
action: z.literal('list'),
}),
z.object({
action: z.literal('get'),
workspace: z.string().min(1),
}),
]);
/** Zod schema for repository management arguments */
export const ManageRepositoriesArgsSchema = z.discriminatedUnion('action', [
z.object({
action: z.literal('list'),
workspaceSlug: z.string().min(1),
}),
z.object({
action: z.literal('get'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
z.object({
action: z.literal('create'),
workspaceSlug: z.string().min(1),
name: z.string().min(1),
description: z.string().optional(),
isPrivate: z.boolean().optional(),
}),
z.object({
action: z.literal('update'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
name: z.string().optional(),
description: z.string().optional(),
isPrivate: z.boolean().optional(),
language: z.string().optional(),
website: z.string().optional(),
hasIssues: z.boolean().optional(),
hasWiki: z.boolean().optional(),
forkPolicy: z.enum(['allow_forks', 'no_public_forks', 'no_forks']).optional(),
}),
z.object({
action: z.literal('delete'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
]);
/** Zod schema for branch management arguments */
export const ManageBranchesArgsSchema = z.discriminatedUnion('action', [
z.object({
action: z.literal('list'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
z.object({
action: z.literal('get'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
branchName: z.string().min(1),
}),
z.object({
action: z.literal('create'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
branchName: z.string().min(1),
sourceBranch: z.string().optional(),
}),
z.object({
action: z.literal('delete'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
branchName: z.string().min(1),
}),
z.object({
action: z.literal('get_model'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
z.object({
action: z.literal('get_permissions'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
z.object({
action: z.literal('get_reviewers'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
]);
/** Zod schema for commit management arguments */
export const QueryCommitsArgsSchema = z.discriminatedUnion('action', [
z.object({
action: z.literal('list'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
branch: z.string().optional(),
include: z.string().optional(),
exclude: z.string().optional(),
}),
z.object({
action: z.literal('get'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
commitHash: z.string().min(40).max(40),
}),
z.object({
action: z.literal('get_diff'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
commitHash: z.string().min(40).max(40),
path: z.string().optional(),
context: z.number().optional(),
}),
z.object({
action: z.literal('get_patch'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
commitHash: z.string().min(40).max(40),
}),
]);
/** Zod schema for pull request management arguments */
export const ManagePullRequestsArgsSchema = z.discriminatedUnion('action', [
z.object({
action: z.literal('list'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
state: z.enum(['OPEN', 'MERGED', 'DECLINED', 'SUPERSEDED']).optional(),
}),
z.object({
action: z.literal('get'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
}),
z.object({
action: z.literal('create'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
title: z.string().min(1),
sourceBranch: z.string().min(1),
destinationBranch: z.string().optional(),
description: z.string().optional(),
closeSourceBranch: z.boolean().optional(),
}),
z.object({
action: z.literal('update'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
title: z.string().optional(),
description: z.string().optional(),
}),
z.object({
action: z.literal('approve'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
}),
z.object({
action: z.literal('unapprove'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
}),
z.object({
action: z.literal('merge'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
}),
z.object({
action: z.literal('decline'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
}),
z.object({
action: z.literal('list_comments'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
}),
z.object({
action: z.literal('add_comment'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
pullRequestId: z.number().positive(),
content: z.string().min(1),
}),
]);
/** Zod schema for issue management arguments */
export const ManageIssuesArgsSchema = z.discriminatedUnion('action', [
z.object({
action: z.literal('list'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
state: z.string().optional(),
priority: z.string().optional(),
kind: z.string().optional(),
assignee: z.string().optional(),
reporter: z.string().optional(),
component: z.string().optional(),
milestone: z.string().optional(),
version: z.string().optional(),
limit: z.number().optional(),
}),
z.object({
action: z.literal('get'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
}),
z.object({
action: z.literal('create'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
title: z.string().min(1),
description: z.string().optional(),
kind: z.enum(['bug', 'enhancement', 'proposal', 'task']).optional(),
priority: z.enum(['trivial', 'minor', 'major', 'critical', 'blocker']).optional(),
assignee: z.string().optional(),
component: z.string().optional(),
milestone: z.string().optional(),
version: z.string().optional(),
}),
z.object({
action: z.literal('update'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
title: z.string().optional(),
description: z.string().optional(),
kind: z.enum(['bug', 'enhancement', 'proposal', 'task']).optional(),
priority: z.enum(['trivial', 'minor', 'major', 'critical', 'blocker']).optional(),
state: z.string().optional(),
assignee: z.string().optional(),
component: z.string().optional(),
milestone: z.string().optional(),
version: z.string().optional(),
}),
z.object({
action: z.literal('delete'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
}),
z.object({
action: z.literal('search'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
query: z.string().min(1),
state: z.string().optional(),
priority: z.string().optional(),
kind: z.string().optional(),
limit: z.number().optional(),
}),
z.object({
action: z.literal('get_changes'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
}),
z.object({
action: z.literal('get_watchers'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
}),
z.object({
action: z.literal('list_comments'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
limit: z.number().optional(),
}),
z.object({
action: z.literal('get_comment'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
commentId: z.number().positive(),
}),
z.object({
action: z.literal('add_comment'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
content: z.string().min(1),
}),
z.object({
action: z.literal('update_comment'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
commentId: z.number().positive(),
content: z.string().min(1),
}),
z.object({
action: z.literal('delete_comment'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
issueId: z.number().positive(),
commentId: z.number().positive(),
}),
z.object({
action: z.literal('list_components'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
}),
z.object({
action: z.literal('get_component'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
componentId: z.number().positive(),
}),
z.object({
action: z.literal('list_milestones'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
state: z.enum(['open', 'closed']).optional(),
}),
z.object({
action: z.literal('get_milestone'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
milestoneId: z.number().positive(),
}),
z.object({
action: z.literal('list_versions'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
released: z.boolean().optional(),
}),
z.object({
action: z.literal('get_version'),
workspaceSlug: z.string().min(1),
repoSlug: z.string().min(1),
versionId: z.number().positive(),
}),
]);
//# sourceMappingURL=consolidated-tools.js.map