[
  {
    "name": "add_comment_to_pending_review",
    "description": "Add review comment to the requester's latest pending pull request review. A pending review needs to already exist to call this (check with the user if not sure).",
    "parameters": {
      "type": "object",
      "properties": {
        "body": { "type": "string", "description": "The text of the review comment" },
        "line": { "type": "number", "description": "The line of the blob in the pull request diff that the comment applies to. For multi-line comments, the last line of the range" },
        "owner": { "type": "string", "description": "Repository owner" },
        "path": { "type": "string", "description": "The relative path to the file that necessitates a comment" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" },
        "side": { "type": "string", "enum": ["LEFT", "RIGHT"], "description": "The side of the diff to comment on. LEFT indicates the previous state, RIGHT indicates the new state" },
        "startLine": { "type": "number", "description": "For multi-line comments, the first line of the range that the comment applies to" },
        "startSide": { "type": "string", "enum": ["LEFT", "RIGHT"], "description": "For multi-line comments, the starting side of the diff that the comment applies to" },
        "subjectType": { "type": "string", "enum": ["FILE", "LINE"], "description": "The level at which the comment is targeted" }
      },
      "required": ["owner", "repo", "pullNumber", "path", "body", "subjectType"]
    }
  },
  {
    "name": "add_issue_comment",
    "description": "Add a comment to a specific issue in a GitHub repository. Use this tool to add comments to pull requests as well (in this case pass pull request number as issue_number), but only if user is not asking specifically to add review comments.",
    "parameters": {
      "type": "object",
      "properties": {
        "body": { "type": "string", "description": "Comment content" },
        "issue_number": { "type": "number", "description": "Issue number to comment on" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "issue_number", "body"]
    }
  },
  {
    "name": "add_reply_to_pull_request_comment",
    "description": "Add a reply to an existing pull request comment. This creates a new comment that is linked as a reply to the specified comment.",
    "parameters": {
      "type": "object",
      "properties": {
        "body": { "type": "string", "description": "The text of the reply" },
        "commentId": { "type": "number", "description": "The ID of the comment to reply to" },
        "owner": { "type": "string", "description": "Repository owner" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "pullNumber", "commentId", "body"]
    }
  },
  {
    "name": "assign_copilot_to_issue",
    "description": "Assign Copilot to a specific issue in a GitHub repository.\n\nThis tool can help with the following outcomes:\n- a Pull Request created with source code changes to resolve the issue\n\n\nMore information can be found at:\n- https://docs.github.com/en/copilot/using-github-copilot/using-copilot-coding-agent-to-work-on-tasks/about-assigning-tasks-to-copilot\n",
    "parameters": {
      "type": "object",
      "properties": {
        "base_ref": { "type": "string", "description": "Git reference (e.g., branch) that the agent will start its work from. If not specified, defaults to the repository's default branch" },
        "custom_instructions": { "type": "string", "description": "Optional custom instructions to guide the agent beyond the issue body." },
        "issue_number": { "type": "number", "description": "Issue number" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "issue_number"]
    }
  },
  {
    "name": "create_branch",
    "description": "Create a new branch in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "branch": { "type": "string", "description": "Name for new branch" },
        "from_branch": { "type": "string", "description": "Source branch (defaults to repo default)" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "branch"]
    }
  },
  {
    "name": "create_or_update_file",
    "description": "Create or update a single file in a GitHub repository.\nIf updating, you should provide the SHA of the file you want to update. Use this tool to create or update a file in a GitHub repository remotely; do not use it for local file operations.\n\nIn order to obtain the SHA of original file version before updating, use the following git command:\ngit rev-parse <branch>:<path to file>\n\nSHA MUST be provided for existing file updates.\n",
    "parameters": {
      "type": "object",
      "properties": {
        "branch": { "type": "string", "description": "Branch to create/update the file in" },
        "content": { "type": "string", "description": "Content of the file" },
        "message": { "type": "string", "description": "Commit message" },
        "owner": { "type": "string", "description": "Repository owner (username or organization)" },
        "path": { "type": "string", "description": "Path where to create/update the file" },
        "repo": { "type": "string", "description": "Repository name" },
        "sha": { "type": "string", "description": "The blob SHA of the file being replaced. Required if the file already exists." }
      },
      "required": ["owner", "repo", "path", "content", "message", "branch"]
    }
  },
  {
    "name": "create_pull_request",
    "description": "Create a new pull request in a GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "base": { "type": "string", "description": "Branch to merge into" },
        "body": { "type": "string", "description": "PR description" },
        "draft": { "type": "boolean", "description": "Create as draft PR" },
        "head": { "type": "string", "description": "Branch containing changes" },
        "maintainer_can_modify": { "type": "boolean", "description": "Allow maintainer edits" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" },
        "title": { "type": "string", "description": "PR title" }
      },
      "required": ["owner", "repo", "title", "head", "base"]
    }
  },
  {
    "name": "create_repository",
    "description": "Create a new GitHub repository in your account or specified organization",
    "parameters": {
      "type": "object",
      "properties": {
        "autoInit": { "type": "boolean", "description": "Initialize with README" },
        "description": { "type": "string", "description": "Repository description" },
        "name": { "type": "string", "description": "Repository name" },
        "organization": { "type": "string", "description": "Organization to create the repository in (omit to create in your personal account)" },
        "private": { "type": "boolean", "description": "Whether repo should be private" }
      },
      "required": ["name"]
    }
  },
  {
    "name": "delete_file",
    "description": "Delete a file from a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "branch": { "type": "string", "description": "Branch to delete the file from" },
        "message": { "type": "string", "description": "Commit message" },
        "owner": { "type": "string", "description": "Repository owner (username or organization)" },
        "path": { "type": "string", "description": "Path to the file to delete" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "path", "message", "branch"]
    }
  },
  {
    "name": "fork_repository",
    "description": "Fork a GitHub repository to your account or specified organization",
    "parameters": {
      "type": "object",
      "properties": {
        "organization": { "type": "string", "description": "Organization to fork to" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "get_commit",
    "description": "Get details for a commit from a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "include_diff": { "type": "boolean", "default": true, "description": "Whether to include file diffs and stats in the response. Default is true." },
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" },
        "sha": { "type": "string", "description": "Commit SHA, branch name, or tag name" }
      },
      "required": ["owner", "repo", "sha"]
    }
  },
  {
    "name": "get_file_contents",
    "description": "Get the contents of a file or directory from a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner (username or organization)" },
        "path": { "type": "string", "default": "/", "description": "Path to file/directory" },
        "ref": { "type": "string", "description": "Accepts optional git refs such as `refs/tags/{tag}`, `refs/heads/{branch}` or `refs/pull/{pr_number}/head`" },
        "repo": { "type": "string", "description": "Repository name" },
        "sha": { "type": "string", "description": "Accepts optional commit SHA. If specified, it will be used instead of ref" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "get_label",
    "description": "Get a specific label from a repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "name": { "type": "string", "description": "Label name." },
        "owner": { "type": "string", "description": "Repository owner (username or organization name)" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "name"]
    }
  },
  {
    "name": "get_latest_release",
    "description": "Get the latest release in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "get_me",
    "description": "Get details of the authenticated GitHub user. Use this when a request is about the user's own profile for GitHub. Or when information is missing to build other tool calls.",
    "parameters": { "type": "object", "properties": {} }
  },
  {
    "name": "get_release_by_tag",
    "description": "Get a specific release by its tag name in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" },
        "tag": { "type": "string", "description": "Tag name (e.g., 'v1.0.0')" }
      },
      "required": ["owner", "repo", "tag"]
    }
  },
  {
    "name": "get_tag",
    "description": "Get details about a specific git tag in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" },
        "tag": { "type": "string", "description": "Tag name" }
      },
      "required": ["owner", "repo", "tag"]
    }
  },
  {
    "name": "get_team_members",
    "description": "Get member usernames of a specific team in an organization. Limited to organizations accessible with current credentials",
    "parameters": {
      "type": "object",
      "properties": {
        "org": { "type": "string", "description": "Organization login (owner) that contains the team." },
        "team_slug": { "type": "string", "description": "Team slug" }
      },
      "required": ["org", "team_slug"]
    }
  },
  {
    "name": "get_teams",
    "description": "Get details of the teams the user is a member of. Limited to organizations accessible with current credentials",
    "parameters": {
      "type": "object",
      "properties": {
        "user": { "type": "string", "description": "Username to get teams for. If not provided, uses the authenticated user." }
      }
    }
  },
  {
    "name": "issue_read",
    "description": "Get information about a specific issue in a GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "issue_number": { "type": "number", "description": "The number of the issue" },
        "method": { "type": "string", "enum": ["get", "get_comments", "get_sub_issues", "get_labels"], "description": "1. get - Get details of a specific issue. 2. get_comments - Get issue comments. 3. get_sub_issues - Get sub-issues of the issue. 4. get_labels - Get labels assigned to the issue." },
        "owner": { "type": "string", "description": "The owner of the repository" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "The name of the repository" }
      },
      "required": ["method", "owner", "repo", "issue_number"]
    }
  },
  {
    "name": "issue_write",
    "description": "Create a new or update an existing issue in a GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "assignees": { "type": "array", "items": { "type": "string" }, "description": "Usernames to assign to this issue" },
        "body": { "type": "string", "description": "Issue body content" },
        "duplicate_of": { "type": "number", "description": "Issue number that this issue is a duplicate of. Only used when state_reason is 'duplicate'." },
        "issue_number": { "type": "number", "description": "Issue number to update" },
        "labels": { "type": "array", "items": { "type": "string" }, "description": "Labels to apply to this issue" },
        "method": { "type": "string", "enum": ["create", "update"], "description": "'create' creates a new issue. 'update' updates an existing issue." },
        "milestone": { "type": "number", "description": "Milestone number" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" },
        "state": { "type": "string", "enum": ["open", "closed"], "description": "New state" },
        "state_reason": { "type": "string", "enum": ["completed", "not_planned", "duplicate"], "description": "Reason for the state change. Ignored unless state is changed." },
        "title": { "type": "string", "description": "Issue title" },
        "type": { "type": "string", "description": "Type of this issue. Only use if the repository has issue types configured." }
      },
      "required": ["method", "owner", "repo"]
    }
  },
  {
    "name": "list_branches",
    "description": "List branches in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "list_commits",
    "description": "Get list of commits of a branch in a GitHub repository. Returns at least 30 results per page by default, but can return more if specified using the perPage parameter (up to 100).",
    "parameters": {
      "type": "object",
      "properties": {
        "author": { "type": "string", "description": "Author username or email address to filter commits by" },
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "path": { "type": "string", "description": "Only commits containing this file path will be returned" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" },
        "sha": { "type": "string", "description": "Commit SHA, branch or tag name to list commits of. Defaults to the default branch." },
        "since": { "type": "string", "description": "Only commits after this date (ISO 8601)" },
        "until": { "type": "string", "description": "Only commits before this date (ISO 8601)" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "list_issue_types",
    "description": "List supported issue types for repository owner (organization).",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "The organization owner of the repository" }
      },
      "required": ["owner"]
    }
  },
  {
    "name": "list_issues",
    "description": "List issues in a GitHub repository. For pagination, use the 'endCursor' from the previous response's 'pageInfo' in the 'after' parameter.",
    "parameters": {
      "type": "object",
      "properties": {
        "after": { "type": "string", "description": "Cursor for pagination." },
        "direction": { "type": "string", "enum": ["ASC", "DESC"], "description": "Order direction. Requires 'orderBy' too." },
        "labels": { "type": "array", "items": { "type": "string" }, "description": "Filter by labels" },
        "orderBy": { "type": "string", "enum": ["CREATED_AT", "UPDATED_AT", "COMMENTS"], "description": "Order issues by field. Requires 'direction' too." },
        "owner": { "type": "string", "description": "Repository owner" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" },
        "since": { "type": "string", "description": "Filter by date (ISO 8601 timestamp)" },
        "state": { "type": "string", "enum": ["OPEN", "CLOSED"], "description": "Filter by state" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "list_pull_requests",
    "description": "List pull requests in a GitHub repository. If the user specifies an author, then DO NOT use this tool and use the search_pull_requests tool instead.",
    "parameters": {
      "type": "object",
      "properties": {
        "base": { "type": "string", "description": "Filter by base branch" },
        "direction": { "type": "string", "enum": ["asc", "desc"], "description": "Sort direction" },
        "head": { "type": "string", "description": "Filter by head user/org and branch" },
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" },
        "sort": { "type": "string", "enum": ["created", "updated", "popularity", "long-running"], "description": "Sort by" },
        "state": { "type": "string", "enum": ["open", "closed", "all"], "description": "Filter by state" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "list_releases",
    "description": "List releases in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "list_repository_collaborators",
    "description": "List collaborators of a GitHub repository. Results are paginated; the response includes `nextPage`, `prevPage`, `firstPage`, and `lastPage` fields. To get the next page, use the `nextPage` value as the `page` parameter.",
    "parameters": {
      "type": "object",
      "properties": {
        "affiliation": { "type": "string", "enum": ["outside", "direct", "all"], "description": "Filter by affiliation. Default: 'all'" },
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (default 1, min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (default 30, min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "list_tags",
    "description": "List git tags in a GitHub repository",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo"]
    }
  },
  {
    "name": "merge_pull_request",
    "description": "Merge a pull request in a GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "commit_message": { "type": "string", "description": "Extra detail for merge commit" },
        "commit_title": { "type": "string", "description": "Title for merge commit" },
        "merge_method": { "type": "string", "enum": ["merge", "squash", "rebase"], "description": "Merge method" },
        "owner": { "type": "string", "description": "Repository owner" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "pullNumber"]
    }
  },
  {
    "name": "pull_request_read",
    "description": "Get information on a specific pull request in GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "after": { "type": "string", "description": "Cursor for pagination, used only by get_review_comments." },
        "method": { "type": "string", "enum": ["get", "get_diff", "get_status", "get_files", "get_review_comments", "get_reviews", "get_comments", "get_check_runs"], "description": "1. get 2. get_diff 3. get_status 4. get_files 5. get_review_comments 6. get_reviews 7. get_comments 8. get_check_runs" },
        "owner": { "type": "string", "description": "Repository owner" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["method", "owner", "repo", "pullNumber"]
    }
  },
  {
    "name": "pull_request_review_write",
    "description": "Create and/or submit, delete review of a pull request.\n\n- create: Create a new review of a pull request. If \"event\" is provided, the review is submitted; if omitted, a pending review is created.\n- submit_pending: Submit an existing pending review.\n- delete_pending: Delete an existing pending review.\n- resolve_thread / unresolve_thread: only need \"threadId\".",
    "parameters": {
      "type": "object",
      "properties": {
        "body": { "type": "string", "description": "Review comment text" },
        "commitID": { "type": "string", "description": "SHA of commit to review" },
        "event": { "type": "string", "enum": ["APPROVE", "REQUEST_CHANGES", "COMMENT"], "description": "Review action to perform." },
        "method": { "type": "string", "enum": ["create", "submit_pending", "delete_pending", "resolve_thread", "unresolve_thread"] },
        "owner": { "type": "string", "description": "Repository owner" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" },
        "threadId": { "type": "string", "description": "Node ID of the review thread (e.g., PRRT_kwDOxxx). Required for resolve/unresolve_thread." }
      },
      "required": ["method", "owner", "repo", "pullNumber"]
    }
  },
  {
    "name": "push_files",
    "description": "Push multiple files to a GitHub repository in a single commit",
    "parameters": {
      "type": "object",
      "properties": {
        "branch": { "type": "string", "description": "Branch to push to" },
        "files": {
          "type": "array",
          "description": "Array of file objects to push, each object with path (string) and content (string)",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "content": { "type": "string", "description": "file content" },
              "path": { "type": "string", "description": "path to the file" }
            },
            "required": ["path", "content"]
          }
        },
        "message": { "type": "string", "description": "Commit message" },
        "owner": { "type": "string", "description": "Repository owner" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "branch", "files", "message"]
    }
  },
  {
    "name": "request_copilot_review",
    "description": "Request a GitHub Copilot code review for a pull request. Use this for automated feedback on pull requests, usually before requesting a human reviewer.",
    "parameters": {
      "type": "object",
      "properties": {
        "owner": { "type": "string", "description": "Repository owner" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "pullNumber"]
    }
  },
  {
    "name": "search_code",
    "description": "Fast and precise code search across ALL GitHub repositories using GitHub's native search engine. Best for finding exact symbols, functions, classes, or specific code patterns.",
    "parameters": {
      "type": "object",
      "properties": {
        "order": { "type": "string", "enum": ["asc", "desc"], "description": "Sort order for results" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "query": { "type": "string", "description": "Search query (GitHub code search REST). Supports OR/NOT/quoted phrases and qualifiers repo:/org:/user:/language:/path:/filename:/extension:/in:file/in:path/size:/is:archived/is:fork. Max 256 chars." },
        "sort": { "type": "string", "description": "Sort field ('indexed' only)" }
      },
      "required": ["query"]
    }
  },
  {
    "name": "search_commits",
    "description": "Search for commits across GitHub repositories using GitHub's commit search syntax. Searches the default branch only.",
    "parameters": {
      "type": "object",
      "properties": {
        "order": { "type": "string", "enum": ["asc", "desc"], "description": "Sort order" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "query": { "type": "string", "description": "Commit search query. Scope with repo:/org:/user:. Other qualifiers: author:, committer:, author-date:, merge:, hash:, tree:, parent:, is:public." },
        "sort": { "type": "string", "enum": ["author-date", "committer-date"], "description": "Sort by author or committer date (defaults to best match)" }
      },
      "required": ["query"]
    }
  },
  {
    "name": "search_issues",
    "description": "Search for issues in GitHub repositories using issues search syntax already scoped to is:issue",
    "parameters": {
      "type": "object",
      "properties": {
        "order": { "type": "string", "enum": ["asc", "desc"], "description": "Sort order" },
        "owner": { "type": "string", "description": "Optional repository owner. If provided with repo, only issues for this repository are listed." },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "query": { "type": "string", "description": "Search query using GitHub issues search syntax" },
        "repo": { "type": "string", "description": "Optional repository name. If provided with owner, only issues for this repository are listed." },
        "sort": { "type": "string", "enum": ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], "description": "Sort field by number of matches of categories, defaults to best match" }
      },
      "required": ["query"]
    }
  },
  {
    "name": "search_pull_requests",
    "description": "Search for pull requests in GitHub repositories using issues search syntax already scoped to is:pr",
    "parameters": {
      "type": "object",
      "properties": {
        "order": { "type": "string", "enum": ["asc", "desc"], "description": "Sort order" },
        "owner": { "type": "string", "description": "Optional repository owner. If provided with repo, only pull requests for this repository are listed." },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "query": { "type": "string", "description": "Search query using GitHub pull request search syntax" },
        "repo": { "type": "string", "description": "Optional repository name. If provided with owner, only pull requests for this repository are listed." },
        "sort": { "type": "string", "enum": ["comments", "reactions", "reactions-+1", "reactions--1", "reactions-smile", "reactions-thinking_face", "reactions-heart", "reactions-tada", "interactions", "created", "updated"], "description": "Sort field by number of matches of categories, defaults to best match" }
      },
      "required": ["query"]
    }
  },
  {
    "name": "search_repositories",
    "description": "Find GitHub repositories by name, description, readme, topics, or other metadata. Perfect for discovering projects, finding examples, or locating specific repositories across GitHub.",
    "parameters": {
      "type": "object",
      "properties": {
        "minimal_output": { "type": "boolean", "default": true, "description": "Return minimal repository information (default: true). When false, returns full GitHub API repository objects." },
        "order": { "type": "string", "enum": ["asc", "desc"], "description": "Sort order" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "query": { "type": "string", "description": "Repository search query. Examples: 'machine learning in:name stars:>1000 language:python', 'topic:react', 'user:facebook'." },
        "sort": { "type": "string", "enum": ["stars", "forks", "help-wanted-issues", "updated"], "description": "Sort repositories by field, defaults to best match" }
      },
      "required": ["query"]
    }
  },
  {
    "name": "search_users",
    "description": "Find GitHub users by username, real name, or other profile information. Useful for locating developers, contributors, or team members.",
    "parameters": {
      "type": "object",
      "properties": {
        "order": { "type": "string", "enum": ["asc", "desc"], "description": "Sort order" },
        "page": { "type": "number", "minimum": 1, "description": "Page number for pagination (min 1)" },
        "perPage": { "type": "number", "minimum": 1, "maximum": 100, "description": "Results per page for pagination (min 1, max 100)" },
        "query": { "type": "string", "description": "User search query. Examples: 'john smith', 'location:seattle', 'followers:>100'. Search is automatically scoped to type:user." },
        "sort": { "type": "string", "enum": ["followers", "repositories", "joined"], "description": "Sort users by number of followers or repositories, or when the person joined GitHub." }
      },
      "required": ["query"]
    }
  },
  {
    "name": "update_pull_request",
    "description": "Update an existing pull request in a GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "base": { "type": "string", "description": "New base branch name" },
        "body": { "type": "string", "description": "New description" },
        "draft": { "type": "boolean", "description": "Mark pull request as draft (true) or ready for review (false)" },
        "maintainer_can_modify": { "type": "boolean", "description": "Allow maintainer edits" },
        "owner": { "type": "string", "description": "Repository owner" },
        "pullNumber": { "type": "number", "description": "Pull request number to update" },
        "repo": { "type": "string", "description": "Repository name" },
        "reviewers": { "type": "array", "items": { "type": "string" }, "description": "GitHub usernames to request reviews from" },
        "state": { "type": "string", "enum": ["open", "closed"], "description": "New state" },
        "title": { "type": "string", "description": "New title" }
      },
      "required": ["owner", "repo", "pullNumber"]
    }
  },
  {
    "name": "update_pull_request_branch",
    "description": "Update the branch of a pull request with the latest changes from the base branch.",
    "parameters": {
      "type": "object",
      "properties": {
        "expectedHeadSha": { "type": "string", "description": "The expected SHA of the pull request's HEAD ref" },
        "owner": { "type": "string", "description": "Repository owner" },
        "pullNumber": { "type": "number", "description": "Pull request number" },
        "repo": { "type": "string", "description": "Repository name" }
      },
      "required": ["owner", "repo", "pullNumber"]
    }
  },
  {
    "name": "sub_issue_write",
    "description": "Add a sub-issue to a parent issue in a GitHub repository.",
    "parameters": {
      "type": "object",
      "properties": {
        "after_id": { "type": "number", "description": "The ID of the sub-issue to be prioritized after (either after_id OR before_id should be specified)" },
        "before_id": { "type": "number", "description": "The ID of the sub-issue to be prioritized before (either after_id OR before_id should be specified)" },
        "issue_number": { "type": "number", "description": "The number of the parent issue" },
        "method": { "type": "string", "description": "'add' - add a sub-issue to a parent issue. 'remove' - remove a sub-issue from a parent issue. 'reprioritize' - change the order of sub-issues within a parent issue, using 'after_id' or 'before_id'." },
        "owner": { "type": "string", "description": "Repository owner" },
        "replace_parent": { "type": "boolean", "description": "When true, replaces the sub-issue's current parent issue. Use with 'add' method only." },
        "repo": { "type": "string", "description": "Repository name" },
        "sub_issue_id": { "type": "number", "description": "The ID of the sub-issue to add. ID is not the same as issue number" }
      },
      "required": ["method", "owner", "repo", "issue_number", "sub_issue_id"]
    }
  }
]
