{"version":3,"sources":["../src/github-client.ts","../src/utils/error-handler.ts","../src/utils/timeout.ts","../src/server.ts","../src/schemas/repos.ts","../src/utils/validators.ts","../src/utils/retry.ts","../src/utils/response-handler.ts","../src/tools/repos.ts","../src/schemas/issues.ts","../src/tools/issues.ts","../src/schemas/pulls.ts","../src/tools/pulls.ts","../src/schemas/branches.ts","../src/tools/branches.ts","../src/schemas/commits.ts","../src/tools/commits.ts","../src/schemas/contents.ts","../src/tools/contents.ts","../src/schemas/git.ts","../src/tools/git.ts","../src/index.ts"],"sourcesContent":["/**\n * GitHub Enterprise Octokit client - baseUrl normalization, auth, optional self-signed cert.\n */\n\nimport { Octokit } from \"octokit\";\nimport https from \"node:https\";\n\nexport function normalizeEndpoint(url: string): string {\n  let u = url.trim();\n  if (!u) return u;\n  if (u.endsWith(\"/\")) u = u.slice(0, -1);\n  if (u.endsWith(\"/api/v3\")) return u;\n  return `${u}/api/v3`;\n}\n\nexport interface CreateClientOptions {\n  endpoint: string;\n  token: string;\n  allowSelfSigned?: boolean;\n}\n\nexport function createGitHubClient(options: CreateClientOptions): Octokit {\n  const { endpoint, token, allowSelfSigned = false } = options;\n  const baseUrl = normalizeEndpoint(endpoint);\n  const auth = token.trim();\n\n  const requestDefaults: Record<string, unknown> = {};\n  if (allowSelfSigned) {\n    requestDefaults.agent = new https.Agent({\n      rejectUnauthorized: false,\n    });\n  }\n\n  return new Octokit({\n    auth,\n    baseUrl,\n    request: requestDefaults,\n  });\n}\n","/**\n * GitHub API error handling - defensive parsing, redact credentials, format for MCP clients.\n */\n\nconst MAX_STACK_LINES = 10;\nconst CREDENTIAL_PATTERNS = [\n  /ghp_[A-Za-z0-9_]+/g,\n  /ghs_[A-Za-z0-9_]+/g,\n  /gho_[A-Za-z0-9_]+/g,\n  /ghu_[A-Za-z0-9_]+/g,\n  /ghr_[A-Za-z0-9_]+/g,\n  /https?:\\/\\/[^\\s'\"]+/g,\n];\n\nfunction redact(str: string): string {\n  let out = str;\n  for (const re of CREDENTIAL_PATTERNS) {\n    out = out.replace(re, \"[REDACTED]\");\n  }\n  return out;\n}\n\nfunction limitStack(stack: string | undefined): string {\n  if (!stack) return \"\";\n  const lines = stack.split(\"\\n\").slice(0, MAX_STACK_LINES);\n  return lines.map((l) => redact(l)).join(\"\\n\");\n}\n\nfunction safeStringify(obj: unknown): string {\n  try {\n    return JSON.stringify(\n      obj,\n      (_, v) => (v === undefined ? \"[undefined]\" : v),\n      2\n    );\n  } catch {\n    return String(obj);\n  }\n}\n\nexport interface GitHubErrorPayload {\n  type: \"github_error\";\n  status: number;\n  message: string;\n  documentation_url?: string;\n}\n\n/**\n * Extract user-friendly message from GitHub API error response.\n */\nexport function formatGitHubError(error: unknown): GitHubErrorPayload {\n  const fallback = {\n    type: \"github_error\" as const,\n    status: 500,\n    message: \"An unexpected error occurred\",\n  };\n\n  if (error && typeof error === \"object\" && \"status\" in error) {\n    const e = error as { status?: number; message?: string; documentation_url?: string; response?: { data?: unknown } };\n    const status = typeof e.status === \"number\" ? e.status : fallback.status;\n    let message = typeof e.message === \"string\" ? e.message : fallback.message;\n\n    if (e.response && typeof e.response === \"object\" && e.response.data && typeof e.response.data === \"object\") {\n      const data = e.response.data as { message?: string; errors?: unknown };\n      if (typeof data.message === \"string\") message = data.message;\n    }\n\n    return {\n      type: \"github_error\",\n      status,\n      message: redact(message),\n      documentation_url: typeof e.documentation_url === \"string\" ? redact(e.documentation_url) : undefined,\n    };\n  }\n\n  if (error instanceof Error) {\n    return {\n      ...fallback,\n      message: redact(error.message),\n    };\n  }\n\n  return fallback;\n}\n\n/**\n * Format any error for MCP client (with redaction and limited stack).\n */\nexport function formatForMcp(error: unknown): string {\n  const gh = formatGitHubError(error);\n  const stack =\n    error instanceof Error ? limitStack(error.stack) : \"\";\n  const extra = stack ? `\\nStack (truncated):\\n${stack}` : \"\";\n  return safeStringify(gh) + extra;\n}\n","/**\n * Timeout wrapper for Octokit calls (default 30s, configurable via env).\n */\n\nconst DEFAULT_TIMEOUT_MS = 30000;\nconst ENV_KEY = \"GITHUB_REQUEST_TIMEOUT_MS\";\n\nfunction getTimeoutMs(): number {\n  const env = process.env[ENV_KEY];\n  if (env != null) {\n    const n = parseInt(env, 10);\n    if (Number.isFinite(n) && n > 0) return n;\n  }\n  return DEFAULT_TIMEOUT_MS;\n}\n\nexport class TimeoutError extends Error {\n  constructor(ms: number) {\n    super(`Request timed out after ${ms}ms`);\n    this.name = \"TimeoutError\";\n  }\n}\n\nexport async function withTimeout<T>(\n  promise: Promise<T>,\n  ms: number = getTimeoutMs()\n): Promise<T> {\n  let timeoutId: ReturnType<typeof setTimeout>;\n  const timeoutPromise = new Promise<never>((_, reject) => {\n    timeoutId = setTimeout(() => reject(new TimeoutError(ms)), ms);\n  });\n  try {\n    const result = await Promise.race([promise, timeoutPromise]);\n    clearTimeout(timeoutId!);\n    return result;\n  } catch (e) {\n    clearTimeout(timeoutId!);\n    throw e;\n  }\n}\n","import type { Octokit } from \"octokit\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { registerRepoTools } from \"./tools/repos.js\";\nimport { registerIssueTools } from \"./tools/issues.js\";\nimport { registerPullTools } from \"./tools/pulls.js\";\nimport { registerBranchTools } from \"./tools/branches.js\";\nimport { registerCommitTools } from \"./tools/commits.js\";\nimport { registerContentsTools } from \"./tools/contents.js\";\nimport { registerGitTools } from \"./tools/git.js\";\n\nconst SERVER_INSTRUCTIONS = `This MCP server provides access to GitHub Enterprise API.\n\nAvailable capabilities:\n- Repository management (create, read, update, delete repositories)\n- Issue tracking (create, update, comment on issues)\n- Pull request workflows (create, review, merge PRs)\n- Branch and commit operations\n- Repository contents (get, create/update, delete files)\n- Git low-level (create commit with multiple files, update ref, list/create tags)\n- GitHub Actions management\n\nAuthentication: Requires GitHub Enterprise endpoint URL and Personal Access Token.\nRate limits apply based on your GitHub Enterprise configuration.`;\n\nconst SHUTDOWN_TIMEOUT_MS = 10000;\n\nfunction isDebug(): boolean {\n  const v = process.env.GITHUB_ENTERPRISE_DEBUG ?? process.env.DEBUG;\n  return v === \"1\" || v === \"true\";\n}\n\nexport async function runServer(octokit: Octokit): Promise<void> {\n  const server = new McpServer(\n    {\n      name: \"github-enterprise-mcp-server\",\n      version: \"1.0.5\",\n    },\n    { instructions: SERVER_INSTRUCTIONS }\n  );\n\n  registerRepoTools(server, octokit);\n  registerIssueTools(server, octokit);\n  registerPullTools(server, octokit);\n  registerBranchTools(server, octokit);\n  registerCommitTools(server, octokit);\n  registerContentsTools(server, octokit);\n  registerGitTools(server, octokit);\n  const toolCount = 5 + 6 + 5 + 4 + 3 + 3 + 4; // repos, issues, pulls, branches, commits, contents(3), git(4)\n  if (isDebug()) process.stderr.write(`Registered ${toolCount} tools.\\n`);\n\n  let shutdownTimeout: ReturnType<typeof setTimeout> | undefined;\n  const shutdown = (): void => {\n    if (isDebug()) process.stderr.write(\"Shutting down gracefully...\\n\");\n    clearTimeout(shutdownTimeout);\n    server.close().then(\n      () => process.exit(0),\n      () => process.exit(1)\n    );\n    // If close() doesn't finish in time, force exit (e.g. Cursor disconnected)\n    shutdownTimeout = setTimeout(() => {\n      if (isDebug()) process.stderr.write(\"Shutdown timeout exceeded, exiting.\\n\");\n      process.exit(1);\n    }, SHUTDOWN_TIMEOUT_MS);\n  };\n\n  process.on(\"SIGINT\", shutdown);\n  process.on(\"SIGTERM\", shutdown);\n\n  try {\n    const transport = new StdioServerTransport();\n    await server.connect(transport);\n    if (isDebug()) process.stderr.write(\"GitHub Enterprise MCP Server running on stdio.\\n\");\n  } catch (err) {\n    process.stderr.write(String(err) + \"\\n\");\n    process.exit(1);\n  }\n}\n","import { z } from \"zod\";\n\nexport const repoGetInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n});\n\nexport const repoListInput = z.object({\n  type: z.enum([\"all\", \"owner\", \"public\", \"private\", \"member\"]).optional().default(\"all\"),\n  sort: z.enum([\"created\", \"updated\", \"pushed\", \"full_name\"]).optional().default(\"updated\"),\n  direction: z.enum([\"asc\", \"desc\"]).optional().default(\"desc\"),\n  per_page: z.number().min(1).max(100).optional().default(30),\n  page: z.number().min(1).optional().default(1),\n});\n\nexport const repoCreateInput = z.object({\n  name: z.string(),\n  description: z.string().optional(),\n  private: z.boolean().optional().default(false),\n  auto_init: z.boolean().optional().default(false),\n});\n\nexport const repoUpdateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  name: z.string().optional(),\n  description: z.string().optional().nullable(),\n  private: z.boolean().optional(),\n});\n\nexport const repoDeleteInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n});\n","/**\n * GitHub-specific input validation (after Zod, before API call).\n */\n\nconst REPO_NAME_REGEX = /^[a-zA-Z0-9._-]+$/;\nconst REPO_NAME_MAX_LEN = 100;\nconst INVALID_BRANCH_CHARS = /[\\s.~^:?*\\[\\]\\\\]|\\x00-\\x1f/;\n\nexport class ValidationError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"ValidationError\";\n  }\n}\n\nexport function validateRepoName(name: string): void {\n  if (typeof name !== \"string\" || name.length === 0) {\n    throw new ValidationError(\"Repository name is required\");\n  }\n  if (name.length > REPO_NAME_MAX_LEN) {\n    throw new ValidationError(`Repository name must be at most ${REPO_NAME_MAX_LEN} characters`);\n  }\n  if (name.startsWith(\".\") || name.endsWith(\".\")) {\n    throw new ValidationError(\"Repository name cannot start or end with a period\");\n  }\n  if (!REPO_NAME_REGEX.test(name)) {\n    throw new ValidationError(\"Repository name can only contain letters, numbers, and ._-\");\n  }\n}\n\nexport function validateOwner(owner: string): void {\n  if (typeof owner !== \"string\" || owner.length === 0) {\n    throw new ValidationError(\"Owner is required\");\n  }\n  if (owner.length > 100) {\n    throw new ValidationError(\"Owner must be at most 100 characters\");\n  }\n}\n\nexport function validateBranchName(name: string): void {\n  if (typeof name !== \"string\" || name.length === 0) {\n    throw new ValidationError(\"Branch name is required\");\n  }\n  if (name.includes(\"..\")) {\n    throw new ValidationError(\"Branch name cannot contain '..'\");\n  }\n  if (INVALID_BRANCH_CHARS.test(name)) {\n    throw new ValidationError(\"Branch name contains invalid characters (no spaces, ~^:?*[]\\\\ or control chars)\");\n  }\n}\n\nexport function validateTagName(name: string): void {\n  if (typeof name !== \"string\" || name.length === 0) {\n    throw new ValidationError(\"Tag name is required\");\n  }\n  if (INVALID_BRANCH_CHARS.test(name)) {\n    throw new ValidationError(\"Tag name contains invalid characters\");\n  }\n}\n\nexport function validateRepoInput(owner: string, repo: string): void {\n  validateOwner(owner);\n  validateRepoName(repo);\n}\n","/**\n * Retry wrapper with exponential backoff for rate limit (429) and server errors.\n */\n\nconst BASE_DELAY_MS = 1000;\nconst MAX_DELAY_MS = 60000;\nconst MAX_RETRIES = 3;\nconst RETRYABLE_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nfunction isRetryable(error: unknown): boolean {\n  if (error && typeof error === \"object\" && \"status\" in error) {\n    return RETRYABLE_STATUSES.has((error as { status: number }).status);\n  }\n  return false;\n}\n\nfunction getDelayMs(attempt: number): number {\n  const jitter = Math.random() * 1000;\n  const delay = BASE_DELAY_MS * Math.pow(2, attempt) + jitter;\n  return Math.min(delay, MAX_DELAY_MS);\n}\n\nexport async function withRetry<T>(\n  fn: () => Promise<T>,\n  options: { maxRetries?: number } = {}\n): Promise<T> {\n  const maxRetries = options.maxRetries ?? MAX_RETRIES;\n  let lastError: unknown;\n  for (let attempt = 0; attempt <= maxRetries; attempt++) {\n    try {\n      return await fn();\n    } catch (e) {\n      lastError = e;\n      if (attempt === maxRetries || !isRetryable(e)) throw e;\n      const delay = getDelayMs(attempt);\n      await new Promise((r) => setTimeout(r, delay));\n    }\n  }\n  throw lastError;\n}\n","/**\n * Response size limit and truncation for MCP tool responses.\n */\n\nconst DEFAULT_MAX_MB = 10;\nconst ENV_KEY = \"MAX_RESPONSE_SIZE_MB\";\n\nfunction getMaxBytes(): number {\n  const env = process.env[ENV_KEY];\n  if (env != null) {\n    const n = parseFloat(env);\n    if (Number.isFinite(n) && n > 0) return Math.floor(n * 1024 * 1024);\n  }\n  return DEFAULT_MAX_MB * 1024 * 1024;\n}\n\nconst TRUNCATE_MESSAGE = \"\\n\\n[Response truncated. Original size: XMB. Use pagination or filters to reduce result set.]\";\n\nexport function truncateIfNeeded(text: string): string {\n  const max = getMaxBytes();\n  const buf = Buffer.from(text, \"utf-8\");\n  if (buf.length <= max) return text;\n  const keepBytes = Math.floor(max * 0.95);\n  const kept = buf.subarray(0, keepBytes).toString(\"utf-8\");\n  const originalMB = (buf.length / (1024 * 1024)).toFixed(2);\n  return kept + TRUNCATE_MESSAGE.replace(\"XMB\", originalMB);\n}\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as reposSchema from \"../schemas/repos.js\";\nimport { validateRepoInput } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  const out: { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } = {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n  };\n  // MCP structuredContent must be a record (object), not an array.\n  if (data != null && typeof data === \"object\" && !Array.isArray(data)) {\n    out.structuredContent = data;\n  }\n  return out;\n}\n\nexport function registerRepoTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-repo-get\",\n    {\n      title: \"Get Repository\",\n      description: \"Get a repository by owner and name\",\n      inputSchema: reposSchema.repoGetInput,\n    },\n    async (args) => {\n      const { owner, repo } = reposSchema.repoGetInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.repos.get({ owner, repo }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-repo-list\",\n    {\n      title: \"List Repositories\",\n      description: \"List repositories for the authenticated user\",\n      inputSchema: reposSchema.repoListInput,\n    },\n    async (args) => {\n      const params = reposSchema.repoListInput.parse(args);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.listForAuthenticatedUser({\n              type: params.type,\n              sort: params.sort,\n              direction: params.direction,\n              per_page: params.per_page,\n              page: params.page,\n            })\n          )\n        );\n        // MCP structuredContent must be a record; list APIs return an array, so wrap it.\n        return jsonContent({ repositories: res.data });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-repo-create\",\n    {\n      title: \"Create Repository\",\n      description: \"Create a new repository\",\n      inputSchema: reposSchema.repoCreateInput,\n    },\n    async (args) => {\n      const body = reposSchema.repoCreateInput.parse(args);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.createForAuthenticatedUser({\n              name: body.name,\n              description: body.description,\n              private: body.private,\n              auto_init: body.auto_init,\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-repo-update\",\n    {\n      title: \"Update Repository\",\n      description: \"Update a repository\",\n      inputSchema: reposSchema.repoUpdateInput,\n    },\n    async (args) => {\n      const { owner, repo, ...rest } = reposSchema.repoUpdateInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.repos.update({ owner, repo, ...rest }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-repo-delete\",\n    {\n      title: \"Delete Repository\",\n      description: \"Delete a repository\",\n      inputSchema: reposSchema.repoDeleteInput,\n    },\n    async (args) => {\n      const { owner, repo } = reposSchema.repoDeleteInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        await withRetry(() =>\n          withTimeout(octokit.rest.repos.delete({ owner, repo }))\n        );\n        return jsonContent({ deleted: true, owner, repo });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","import { z } from \"zod\";\n\nexport const issueGetInput = z.object({ owner: z.string(), repo: z.string(), issue_number: z.number() });\nexport const issueListInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  state: z.enum([\"open\", \"closed\", \"all\"]).optional().default(\"open\"),\n  sort: z.enum([\"created\", \"updated\", \"comments\"]).optional().default(\"created\"),\n  direction: z.enum([\"asc\", \"desc\"]).optional().default(\"desc\"),\n  per_page: z.number().min(1).max(100).optional().default(30),\n  page: z.number().min(1).optional().default(1),\n});\nexport const issueCreateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  title: z.string(),\n  body: z.string().optional(),\n  assignees: z.array(z.string()).optional(),\n  labels: z.array(z.string()).optional(),\n  milestone: z.number().optional(),\n});\nexport const issueUpdateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  issue_number: z.number(),\n  title: z.string().optional(),\n  body: z.string().optional().nullable(),\n  state: z.enum([\"open\", \"closed\"]).optional(),\n  assignees: z.array(z.string()).optional(),\n  labels: z.array(z.string()).optional(),\n  milestone: z.number().optional().nullable(),\n});\nexport const issueCommentInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  issue_number: z.number(),\n  body: z.string(),\n});\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as issuesSchema from \"../schemas/issues.js\";\nimport { validateRepoInput } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  return {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n    structuredContent: data,\n  };\n}\n\nexport function registerIssueTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-issue-get\",\n    {\n      title: \"Get Issue\",\n      description: \"Get an issue by number\",\n      inputSchema: issuesSchema.issueGetInput,\n    },\n    async (args) => {\n      const { owner, repo, issue_number } = issuesSchema.issueGetInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.issues.get({ owner, repo, issue_number }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-issue-list\",\n    {\n      title: \"List Issues\",\n      description: \"List issues for a repository\",\n      inputSchema: issuesSchema.issueListInput,\n    },\n    async (args) => {\n      const params = issuesSchema.issueListInput.parse(args);\n      validateRepoInput(params.owner, params.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.issues.listForRepo({\n              owner: params.owner,\n              repo: params.repo,\n              state: params.state,\n              sort: params.sort,\n              direction: params.direction,\n              per_page: params.per_page,\n              page: params.page,\n            })\n          )\n        );\n        return jsonContent({ issues: res.data });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-issue-create\",\n    {\n      title: \"Create Issue\",\n      description: \"Create a new issue\",\n      inputSchema: issuesSchema.issueCreateInput,\n    },\n    async (args) => {\n      const body = issuesSchema.issueCreateInput.parse(args);\n      validateRepoInput(body.owner, body.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.issues.create({\n              owner: body.owner,\n              repo: body.repo,\n              title: body.title,\n              body: body.body,\n              assignees: body.assignees,\n              labels: body.labels,\n              milestone: body.milestone,\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-issue-update\",\n    {\n      title: \"Update Issue\",\n      description: \"Update an issue\",\n      inputSchema: issuesSchema.issueUpdateInput,\n    },\n    async (args) => {\n      const { owner, repo, issue_number, ...rest } = issuesSchema.issueUpdateInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.issues.update({ owner, repo, issue_number, ...rest }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-issue-close\",\n    {\n      title: \"Close Issue\",\n      description: \"Close an issue\",\n      inputSchema: issuesSchema.issueUpdateInput,\n    },\n    async (args) => {\n      const { owner, repo, issue_number } = issuesSchema.issueUpdateInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.issues.update({ owner, repo, issue_number, state: \"closed\" }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-issue-comment\",\n    {\n      title: \"Comment on Issue\",\n      description: \"Add a comment to an issue\",\n      inputSchema: issuesSchema.issueCommentInput,\n    },\n    async (args) => {\n      const { owner, repo, issue_number, body } = issuesSchema.issueCommentInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.issues.createComment({ owner, repo, issue_number, body })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","import { z } from \"zod\";\n\nexport const prGetInput = z.object({ owner: z.string(), repo: z.string(), pull_number: z.number() });\nexport const prListInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  state: z.enum([\"open\", \"closed\", \"all\"]).optional().default(\"open\"),\n  sort: z.enum([\"created\", \"updated\", \"popularity\", \"long-running\"]).optional().default(\"created\"),\n  direction: z.enum([\"asc\", \"desc\"]).optional().default(\"desc\"),\n  per_page: z.number().min(1).max(100).optional().default(30),\n  page: z.number().min(1).optional().default(1),\n});\nexport const prCreateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  title: z.string(),\n  head: z.string(),\n  base: z.string(),\n  body: z.string().optional(),\n  draft: z.boolean().optional().default(false),\n});\nexport const prUpdateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  pull_number: z.number(),\n  title: z.string().optional(),\n  body: z.string().optional().nullable(),\n  state: z.enum([\"open\", \"closed\"]).optional(),\n});\nexport const prMergeInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  pull_number: z.number(),\n  commit_title: z.string().optional(),\n  commit_message: z.string().optional(),\n  merge_method: z.enum([\"merge\", \"squash\", \"rebase\"]).optional().default(\"merge\"),\n});\nexport const prReviewInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  pull_number: z.number(),\n  event: z.enum([\"APPROVE\", \"REQUEST_CHANGES\", \"COMMENT\"]),\n  body: z.string().optional(),\n});\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as pullsSchema from \"../schemas/pulls.js\";\nimport { validateRepoInput } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  return {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n    structuredContent: data,\n  };\n}\n\nexport function registerPullTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-pr-get\",\n    {\n      title: \"Get Pull Request\",\n      description: \"Get a pull request by number\",\n      inputSchema: pullsSchema.prGetInput,\n    },\n    async (args) => {\n      const { owner, repo, pull_number } = pullsSchema.prGetInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.pulls.get({ owner, repo, pull_number }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-pr-list\",\n    {\n      title: \"List Pull Requests\",\n      description: \"List pull requests for a repository\",\n      inputSchema: pullsSchema.prListInput,\n    },\n    async (args) => {\n      const params = pullsSchema.prListInput.parse(args);\n      validateRepoInput(params.owner, params.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.pulls.list({\n              owner: params.owner,\n              repo: params.repo,\n              state: params.state,\n              sort: params.sort,\n              direction: params.direction,\n              per_page: params.per_page,\n              page: params.page,\n            })\n          )\n        );\n        return jsonContent({ pull_requests: res.data });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-pr-create\",\n    {\n      title: \"Create Pull Request\",\n      description: \"Create a new pull request\",\n      inputSchema: pullsSchema.prCreateInput,\n    },\n    async (args) => {\n      const body = pullsSchema.prCreateInput.parse(args);\n      validateRepoInput(body.owner, body.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.pulls.create({\n              owner: body.owner,\n              repo: body.repo,\n              title: body.title,\n              head: body.head,\n              base: body.base,\n              body: body.body,\n              draft: body.draft,\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-pr-merge\",\n    {\n      title: \"Merge Pull Request\",\n      description: \"Merge a pull request\",\n      inputSchema: pullsSchema.prMergeInput,\n    },\n    async (args) => {\n      const { owner, repo, pull_number, ...rest } = pullsSchema.prMergeInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.pulls.merge({ owner, repo, pull_number, ...rest }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-pr-review\",\n    {\n      title: \"Create PR Review\",\n      description: \"Submit a pull request review\",\n      inputSchema: pullsSchema.prReviewInput,\n    },\n    async (args) => {\n      const { owner, repo, pull_number, event, body } = pullsSchema.prReviewInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.pulls.createReview({ owner, repo, pull_number, event, body })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","import { z } from \"zod\";\n\nexport const branchListInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  per_page: z.number().min(1).max(100).optional().default(30),\n  page: z.number().min(1).optional().default(1),\n});\nexport const branchGetInput = z.object({ owner: z.string(), repo: z.string(), branch: z.string() });\nexport const branchCreateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  ref: z.string(),\n  sha: z.string(),\n});\nexport const branchDeleteInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  ref: z.string(),\n});\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as branchesSchema from \"../schemas/branches.js\";\nimport { validateRepoInput, validateBranchName } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  return {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n    structuredContent: data,\n  };\n}\n\nexport function registerBranchTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-branch-list\",\n    {\n      title: \"List Branches\",\n      description: \"List branches for a repository\",\n      inputSchema: branchesSchema.branchListInput,\n    },\n    async (args) => {\n      const params = branchesSchema.branchListInput.parse(args);\n      validateRepoInput(params.owner, params.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.listBranches({\n              owner: params.owner,\n              repo: params.repo,\n              per_page: params.per_page,\n              page: params.page,\n            })\n          )\n        );\n        return jsonContent({ branches: res.data });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-branch-get\",\n    {\n      title: \"Get Branch\",\n      description: \"Get a branch by name\",\n      inputSchema: branchesSchema.branchGetInput,\n    },\n    async (args) => {\n      const { owner, repo, branch } = branchesSchema.branchGetInput.parse(args);\n      validateRepoInput(owner, repo);\n      validateBranchName(branch);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.repos.getBranch({ owner, repo, branch }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-branch-create\",\n    {\n      title: \"Create Branch\",\n      description: \"Create a branch (reference)\",\n      inputSchema: branchesSchema.branchCreateInput,\n    },\n    async (args) => {\n      const { owner, repo, ref, sha } = branchesSchema.branchCreateInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.createRef({\n              owner,\n              repo,\n              ref: ref.startsWith(\"refs/\") ? ref : `refs/heads/${ref}`,\n              sha,\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-branch-delete\",\n    {\n      title: \"Delete Branch\",\n      description: \"Delete a branch reference\",\n      inputSchema: branchesSchema.branchDeleteInput,\n    },\n    async (args) => {\n      const { owner, repo, ref } = branchesSchema.branchDeleteInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const refFull = ref.startsWith(\"refs/\") ? ref : `refs/heads/${ref}`;\n        await withRetry(() =>\n          withTimeout(octokit.rest.git.deleteRef({ owner, repo, ref: refFull }))\n        );\n        return jsonContent({ deleted: true, owner, repo, ref: refFull });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","import { z } from \"zod\";\n\nexport const commitGetInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  ref: z.string(),\n});\nexport const commitListInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  sha: z.string().optional(),\n  path: z.string().optional(),\n  per_page: z.number().min(1).max(100).optional().default(30),\n  page: z.number().min(1).optional().default(1),\n});\nexport const commitCompareInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  base: z.string(),\n  head: z.string(),\n});\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as commitsSchema from \"../schemas/commits.js\";\nimport { validateRepoInput } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  return {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n    structuredContent: data,\n  };\n}\n\nexport function registerCommitTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-commit-get\",\n    {\n      title: \"Get Commit\",\n      description: \"Get a commit by SHA or ref\",\n      inputSchema: commitsSchema.commitGetInput,\n    },\n    async (args) => {\n      const { owner, repo, ref } = commitsSchema.commitGetInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.repos.getCommit({ owner, repo, ref }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-commit-list\",\n    {\n      title: \"List Commits\",\n      description: \"List commits for a repository\",\n      inputSchema: commitsSchema.commitListInput,\n    },\n    async (args) => {\n      const params = commitsSchema.commitListInput.parse(args);\n      validateRepoInput(params.owner, params.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.listCommits({\n              owner: params.owner,\n              repo: params.repo,\n              sha: params.sha,\n              path: params.path,\n              per_page: params.per_page,\n              page: params.page,\n            })\n          )\n        );\n        return jsonContent({ commits: res.data });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-commit-compare\",\n    {\n      title: \"Compare Commits\",\n      description: \"Compare two commits\",\n      inputSchema: commitsSchema.commitCompareInput,\n    },\n    async (args) => {\n      const { owner, repo, base, head } = commitsSchema.commitCompareInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(octokit.rest.repos.compareCommits({ owner, repo, base, head }))\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","import { z } from \"zod\";\n\nexport const contentsGetInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  path: z.string(),\n  ref: z.string().optional(),\n});\n\nexport const contentsCreateOrUpdateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  path: z.string(),\n  message: z.string(),\n  content: z.string(),\n  sha: z.string().optional(),\n  branch: z.string().optional(),\n});\n\nexport const contentsDeleteInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  path: z.string(),\n  message: z.string(),\n  sha: z.string(),\n  branch: z.string().optional(),\n});\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as contentsSchema from \"../schemas/contents.js\";\nimport { validateRepoInput } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  const out: { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } = {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n  };\n  if (data != null && typeof data === \"object\" && !Array.isArray(data)) {\n    out.structuredContent = data;\n  }\n  return out;\n}\n\nfunction toBase64(str: string): string {\n  return Buffer.from(str, \"utf-8\").toString(\"base64\");\n}\n\nexport function registerContentsTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-contents-get\",\n    {\n      title: \"Get file or directory contents\",\n      description: \"Get the contents of a file or directory in a repository\",\n      inputSchema: contentsSchema.contentsGetInput,\n    },\n    async (args) => {\n      const { owner, repo, path, ref } = contentsSchema.contentsGetInput.parse(args);\n      validateRepoInput(owner, repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.getContent({\n              owner,\n              repo,\n              path,\n              ...(ref != null && ref !== \"\" ? { ref } : {}),\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-contents-create-or-update\",\n    {\n      title: \"Create or update a file\",\n      description: \"Create or update a single file in a repository (commits the change)\",\n      inputSchema: contentsSchema.contentsCreateOrUpdateInput,\n    },\n    async (args) => {\n      const body = contentsSchema.contentsCreateOrUpdateInput.parse(args);\n      validateRepoInput(body.owner, body.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.createOrUpdateFileContents({\n              owner: body.owner,\n              repo: body.repo,\n              path: body.path,\n              message: body.message,\n              content: toBase64(body.content),\n              ...(body.sha != null && body.sha !== \"\" ? { sha: body.sha } : {}),\n              ...(body.branch != null && body.branch !== \"\" ? { branch: body.branch } : {}),\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-contents-delete\",\n    {\n      title: \"Delete a file\",\n      description: \"Delete a file from a repository (commits the change)\",\n      inputSchema: contentsSchema.contentsDeleteInput,\n    },\n    async (args) => {\n      const body = contentsSchema.contentsDeleteInput.parse(args);\n      validateRepoInput(body.owner, body.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.deleteFile({\n              owner: body.owner,\n              repo: body.repo,\n              path: body.path,\n              message: body.message,\n              sha: body.sha,\n              ...(body.branch != null && body.branch !== \"\" ? { branch: body.branch } : {}),\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","import { z } from \"zod\";\n\nexport const commitCreateFileEntry = z.object({\n  path: z.string(),\n  content: z.string(),\n  mode: z.enum([\"100644\", \"100755\", \"040000\"]).optional().default(\"100644\"),\n});\n\nexport const commitCreateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  message: z.string(),\n  branch: z.string(),\n  files: z.array(commitCreateFileEntry).min(1),\n});\n\nexport const refUpdateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  ref: z.string(),\n  sha: z.string(),\n  force: z.boolean().optional().default(false),\n});\n\nexport const tagListInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  per_page: z.number().min(1).max(100).optional().default(30),\n  page: z.number().min(1).optional().default(1),\n});\n\nexport const tagCreateInput = z.object({\n  owner: z.string(),\n  repo: z.string(),\n  tag: z.string(),\n  message: z.string(),\n  object: z.string(),\n  type: z.enum([\"commit\", \"tree\", \"blob\"]).optional().default(\"commit\"),\n});\n","import type { Octokit } from \"octokit\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport * as gitSchema from \"../schemas/git.js\";\nimport { validateRepoInput, validateBranchName, validateTagName } from \"../utils/validators.js\";\nimport { withRetry } from \"../utils/retry.js\";\nimport { withTimeout } from \"../utils/timeout.js\";\nimport { formatForMcp } from \"../utils/error-handler.js\";\nimport { truncateIfNeeded } from \"../utils/response-handler.js\";\n\nfunction jsonContent(data: unknown): { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } {\n  const text = typeof data === \"string\" ? data : JSON.stringify(data, null, 2);\n  const out: { content: [{ type: \"text\"; text: string }]; structuredContent?: unknown } = {\n    content: [{ type: \"text\", text: truncateIfNeeded(text) }],\n  };\n  if (data != null && typeof data === \"object\" && !Array.isArray(data)) {\n    out.structuredContent = data;\n  }\n  return out;\n}\n\nfunction toBase64(str: string): string {\n  return Buffer.from(str, \"utf-8\").toString(\"base64\");\n}\n\n/** For getRef: full ref name (e.g. refs/heads/main) */\nfunction normalizeRef(ref: string): string {\n  const r = ref.trim();\n  if (r.startsWith(\"refs/\")) return r;\n  if (r.includes(\"/\")) return `refs/${r}`;\n  return `refs/heads/${r}`;\n}\n\n/** For updateRef: ref path without \"refs/\" prefix (e.g. heads/main) */\nfunction refPathForUpdate(ref: string): string {\n  const r = ref.trim();\n  if (r.startsWith(\"refs/\")) return r.slice(5);\n  if (r.includes(\"/\")) return r;\n  return `heads/${r}`;\n}\n\nfunction refToPath(ref: string): string {\n  const r = ref.trim();\n  if (r.startsWith(\"refs/\")) return r;\n  if (r.includes(\"/\")) return `refs/heads/${r}`;\n  return `refs/heads/${r}`;\n}\n\n/** Call getRef; on 404 try short ref (heads/main) for GHE compatibility */\nasync function getRefForBranch(\n  octokit: Octokit,\n  owner: string,\n  repo: string,\n  branch: string\n): Promise<{ sha: string }> {\n  const refPath = refToPath(branch);\n  try {\n    const { data } = await withRetry(() =>\n      withTimeout(octokit.rest.git.getRef({ owner, repo, ref: refPath }))\n    );\n    return { sha: (data.object as { sha: string }).sha };\n  } catch (err: unknown) {\n    const status = err && typeof err === \"object\" && \"status\" in err ? (err as { status: number }).status : 0;\n    if (status === 404) {\n      const shortRef = refPath.startsWith(\"refs/\") ? refPath.slice(5) : refPath;\n      const { data } = await withRetry(() =>\n        withTimeout(octokit.rest.git.getRef({ owner, repo, ref: shortRef }))\n      );\n      return { sha: (data.object as { sha: string }).sha };\n    }\n    throw err;\n  }\n}\n\nexport function registerGitTools(server: McpServer, octokit: Octokit): void {\n  server.registerTool(\n    \"github-commit-create\",\n    {\n      title: \"Create a commit with file changes\",\n      description: \"Create a new commit with one or more file changes and update the branch (like commit + push)\",\n      inputSchema: gitSchema.commitCreateInput,\n    },\n    async (args) => {\n      const { owner, repo, message, branch, files } = gitSchema.commitCreateInput.parse(args);\n      validateRepoInput(owner, repo);\n      validateBranchName(branch);\n      try {\n        const { sha: parentSha } = await getRefForBranch(octokit, owner, repo, branch);\n\n        const { data: parentCommit } = await withRetry(() =>\n          withTimeout(octokit.rest.git.getCommit({ owner, repo, commit_sha: parentSha }))\n        );\n        const baseTreeSha = parentCommit.tree.sha;\n\n        const blobShas: { path: string; sha: string; mode: string }[] = [];\n        for (const f of files) {\n          const { data: blob } = await withRetry(() =>\n            withTimeout(\n              octokit.rest.git.createBlob({\n                owner,\n                repo,\n                content: toBase64(f.content),\n                encoding: \"base64\",\n              })\n            )\n          );\n          blobShas.push({ path: f.path, sha: blob.sha, mode: f.mode });\n        }\n\n        const tree = blobShas.map(({ path, sha, mode }) => ({ path, sha, mode: mode as \"100644\" | \"100755\" | \"040000\" }));\n        const { data: treeData } = await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.createTree({\n              owner,\n              repo,\n              tree,\n              base_tree: baseTreeSha,\n            })\n          )\n        );\n\n        const { data: commitData } = await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.createCommit({\n              owner,\n              repo,\n              message,\n              tree: treeData.sha,\n              parents: [parentSha],\n            })\n          )\n        );\n\n        const updateRefPath = refPathForUpdate(branch);\n        await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.updateRef({\n              owner,\n              repo,\n              ref: updateRefPath,\n              sha: commitData.sha,\n            })\n          )\n        );\n\n        return jsonContent({ commit: commitData, ref: refToPath(branch) });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-ref-update\",\n    {\n      title: \"Update a reference (push a commit to a branch)\",\n      description: \"Update a branch or tag reference to point to a commit SHA\",\n      inputSchema: gitSchema.refUpdateInput,\n    },\n    async (args) => {\n      const { owner, repo, ref, sha, force } = gitSchema.refUpdateInput.parse(args);\n      validateRepoInput(owner, repo);\n      const refPath = refPathForUpdate(ref);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.updateRef({\n              owner,\n              repo,\n              ref: refPath,\n              sha,\n              force,\n            })\n          )\n        );\n        return jsonContent(res.data);\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-tag-list\",\n    {\n      title: \"List tags\",\n      description: \"List tags for a repository\",\n      inputSchema: gitSchema.tagListInput,\n    },\n    async (args) => {\n      const params = gitSchema.tagListInput.parse(args);\n      validateRepoInput(params.owner, params.repo);\n      try {\n        const res = await withRetry(() =>\n          withTimeout(\n            octokit.rest.repos.listTags({\n              owner: params.owner,\n              repo: params.repo,\n              per_page: params.per_page,\n              page: params.page,\n            })\n          )\n        );\n        return jsonContent({ tags: res.data });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n\n  server.registerTool(\n    \"github-tag-create\",\n    {\n      title: \"Create a tag\",\n      description: \"Create an annotated tag object and reference (e.g. v1.0.0)\",\n      inputSchema: gitSchema.tagCreateInput,\n    },\n    async (args) => {\n      const { owner, repo, tag, message, object, type } = gitSchema.tagCreateInput.parse(args);\n      validateRepoInput(owner, repo);\n      validateTagName(tag);\n      try {\n        const { data: tagObj } = await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.createTag({\n              owner,\n              repo,\n              tag,\n              message,\n              object,\n              type,\n            })\n          )\n        );\n        const refTag = tag.startsWith(\"refs/tags/\") ? tag : `refs/tags/${tag}`;\n        await withRetry(() =>\n          withTimeout(\n            octokit.rest.git.createRef({\n              owner,\n              repo,\n              ref: refTag,\n              sha: tagObj.sha,\n            })\n          )\n        );\n        return jsonContent({ tag: tagObj, ref: refTag });\n      } catch (e) {\n        return { content: [{ type: \"text\", text: formatForMcp(e) }], isError: true };\n      }\n    }\n  );\n}\n","#!/usr/bin/env node\n/**\n * GitHub Enterprise MCP Server - entry point.\n * CLI args: --endpoint, --token; env: GITHUB_ENTERPRISE_ENDPOINT, GITHUB_ENTERPRISE_TOKEN.\n * Security: HTTPS only, token format validation, optional startup validation and self-signed cert.\n */\n\nimport { createGitHubClient, normalizeEndpoint } from \"./github-client.js\";\nimport { formatForMcp } from \"./utils/error-handler.js\";\nimport { withTimeout } from \"./utils/timeout.js\";\nimport { runServer } from \"./server.js\";\n\nconst STARTUP_VALIDATION_TIMEOUT_ENV = \"GITHUB_ENTERPRISE_STARTUP_VALIDATION_TIMEOUT_MS\";\nconst DEFAULT_STARTUP_VALIDATION_TIMEOUT_MS = 60_000;\n\nconst TOKEN_REGEX = /^(ghp|ghs|gho|ghu|ghr)_[A-Za-z0-9_]+$/;\nconst RECOMMENDED_SCOPES = [\"repo\", \"read:org\"];\n\nfunction parseArgs(): {\n  endpoint: string;\n  token: string;\n  allowSelfSigned: boolean;\n} {\n  const args = process.argv.slice(2);\n  let endpoint = process.env.GITHUB_ENTERPRISE_ENDPOINT ?? \"\";\n  let token = process.env.GITHUB_ENTERPRISE_TOKEN ?? \"\";\n  let allowSelfSigned =\n    process.env.ALLOW_SELF_SIGNED_CERT === \"true\" || process.env.ALLOW_SELF_SIGNED_CERT === \"1\";\n\n  for (let i = 0; i < args.length; i++) {\n    if (args[i] === \"--endpoint\" && args[i + 1] != null) {\n      endpoint = args[i + 1].trim();\n      i++;\n    } else if (args[i] === \"--token\" && args[i + 1] != null) {\n      token = args[i + 1].trim();\n      i++;\n    } else if (args[i] === \"--allow-self-signed-cert\") {\n      allowSelfSigned = true;\n    }\n  }\n\n  return { endpoint, token, allowSelfSigned };\n}\n\nfunction validateEndpoint(url: string): void {\n  if (!url.startsWith(\"https://\")) {\n    process.stderr.write(\n      \"Security error: Endpoint must use HTTPS. HTTP is not allowed.\\n\"\n    );\n    process.exit(1);\n  }\n}\n\nfunction validateTokenFormat(token: string): void {\n  if (!TOKEN_REGEX.test(token)) {\n    process.stderr.write(\n      \"Invalid token format. Token must match GitHub pattern (ghp_..., ghs_..., etc.).\\n\"\n    );\n    process.exit(1);\n  }\n}\n\nfunction getStartupValidationTimeoutMs(): number {\n  const env = process.env[STARTUP_VALIDATION_TIMEOUT_ENV];\n  if (env != null) {\n    const n = parseInt(env, 10);\n    if (Number.isFinite(n) && n > 0) return n;\n  }\n  return DEFAULT_STARTUP_VALIDATION_TIMEOUT_MS;\n}\n\nasync function validateStartup(\n  endpoint: string,\n  token: string,\n  allowSelfSigned: boolean\n): Promise<void> {\n  const octokit = createGitHubClient({\n    endpoint,\n    token,\n    allowSelfSigned,\n  });\n\n  const timeoutMs = getStartupValidationTimeoutMs();\n  try {\n    const { data, headers } = await withTimeout(\n      octokit.rest.users.getAuthenticated(),\n      timeoutMs\n    );\n    if (!data?.login) {\n      process.stderr.write(\"Startup validation failed: No login in response.\\n\");\n      process.exit(1);\n    }\n    const skipScopeWarning =\n      process.env.GITHUB_ENTERPRISE_SKIP_SCOPE_WARNING === \"true\" ||\n      process.env.GITHUB_ENTERPRISE_SKIP_SCOPE_WARNING === \"1\";\n    const scopes = (headers[\"x-oauth-scopes\"] as string)?.split(\",\").map((s) => s.trim()) ?? [];\n    const missing = RECOMMENDED_SCOPES.filter((s) => !scopes.includes(s));\n    if (!skipScopeWarning && missing.length > 0) {\n      process.stderr.write(\n        `Warning: Token may be missing recommended scopes: ${missing.join(\", \")}. ` +\n          `Recommended: repo, read:org. (read:org is only needed for org-related operations.) ` +\n          `Server continues. Set GITHUB_ENTERPRISE_SKIP_SCOPE_WARNING=1 to hide this.\\n`\n      );\n    }\n  } catch (err) {\n    process.stderr.write(\n      `Startup validation failed: ${formatForMcp(err)}\\n`\n    );\n    process.exit(1);\n  }\n}\n\nasync function main(): Promise<void> {\n  const { endpoint, token, allowSelfSigned } = parseArgs();\n\n  if (!endpoint) {\n    process.stderr.write(\n      \"Error: Missing required parameter. Provide --endpoint or GITHUB_ENTERPRISE_ENDPOINT.\\n\"\n    );\n    process.exit(1);\n  }\n  if (!token) {\n    process.stderr.write(\n      \"Error: Missing required parameter. Provide --token or GITHUB_ENTERPRISE_TOKEN.\\n\"\n    );\n    process.exit(1);\n  }\n\n  validateEndpoint(endpoint);\n  validateTokenFormat(token);\n\n  if (allowSelfSigned) {\n    process.stderr.write(\n      \"Security warning: Self-signed certificates are allowed. Use only in controlled environments.\\n\"\n    );\n  }\n\n  await validateStartup(endpoint, token, allowSelfSigned);\n\n  const normalizedEndpoint = normalizeEndpoint(endpoint);\n  const octokit = createGitHubClient({\n    endpoint: normalizedEndpoint,\n    token,\n    allowSelfSigned,\n  });\n\n  await runServer(octokit);\n}\n\nmain().catch((err) => {\n  process.stderr.write(formatForMcp(err) + \"\\n\");\n  process.exit(1);\n});\n"],"mappings":"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","names":["https","ENV_KEY","import_zod","jsonContent","import_zod","jsonContent","import_zod","jsonContent","import_zod","jsonContent","import_zod","jsonContent","import_zod","jsonContent","toBase64","toBase64","jsonContent"]}