Files
shockbot/mcp
Colin McDonnell 97937f46f7 console UI improvements and cleanup (#311)
* console UI improvements and cleanup

- add verify workflow button and API endpoint for manual installation check
- move env var check into PromptBox as blocking overlay (hoisted to RepoConsole)
- extract FlagsCheatSheet modal, replace verbose flag hints everywhere
- add info popovers for repo setup / post-checkout script descriptions
- remove unused prAutoFixCiFailures schema fields and migration
- default mentionAllowNonCollaborator to disabled for safety on public repos
- update docs for triggers and getting started

Co-authored-by: Cursor <cursoragent@cursor.com>

* add diagnostic logging for push_branch bug investigation

temporary [push-debug] logs to trace why getPushDestination falls back
to origin/<localBranch> instead of using the correct remote branch name
for same-repo PRs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* add git config diagnostic to verify original bug cause

Co-authored-by: Cursor <cursoragent@cursor.com>

* temporarily disable StoredPushDest to test git config path

Co-authored-by: Cursor <cursoragent@cursor.com>

* remove diagnostic logging for push_branch investigation

verified that StoredPushDest fix works correctly on preview repo.
both the stored dest path and the git config fallback resolve to the
correct remote branch in the GitHub Actions environment.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix formatting in AgentSettings and TriggersSettings

Co-authored-by: Cursor <cursoragent@cursor.com>

* pass derived env var state to PromptBox instead of raw secrets data

eliminates duplicated derivation logic between RepoConsole and PromptBox
by passing envVarMissing, envVarChecking, and agentKeyNames as props.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: prevent duplicate comment after PR review deletes progress comment

progressCommentId now uses three states: undefined (no comment yet),
number (active), null (deliberately deleted). After create_pull_request_review
deletes the progress comment, subsequent report_progress calls skip instead
of creating a new comment.

Co-authored-by: Cursor <cursoragent@cursor.com>

* effort descriptions, test ordering, husky, docs images, typo fix

- rewrote delegation effort level descriptions to per-level breakdown
- action-agents now waits for action-agnostic; action-agnostic waits for root
- added husky + lint-staged (biome check --write on staged files)
- updated triggers docs images and triggers.mdx content
- fixed "figured" → "figures" typo on landing page
- updated pnpm-lock.yaml

Co-authored-by: Cursor <cursoragent@cursor.com>

* Commit

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-16 04:41:04 +00:00
..
2025-11-21 14:08:36 -05:00
2026-01-23 06:28:22 +00:00
2025-11-19 16:02:37 -08:00
2026-01-16 18:43:09 +00:00
2026-01-16 18:43:09 +00:00
2026-01-16 18:43:09 +00:00
2026-01-16 18:43:09 +00:00
2026-01-29 22:49:00 +00:00
2026-02-13 14:24:46 +00:00
2026-01-23 06:28:22 +00:00
2026-02-13 20:01:48 +00:00

gh_pullfrog MCP Tools

this directory contains the mcp (model context protocol) server tools for interacting with github.

available tools

check suite tools

get_check_suite_logs

get workflow run logs for a failed check suite with intelligent log analysis.

parameters:

  • check_suite_id (number): the id from check_suite.id in the webhook payload

replaces: gh run list and gh run view --log

returns: structured failure information for each failed job:

  • _instructions: explains how to use each field
  • failed_jobs[]: array of failed job results, each containing:
    • job_id, job_name, job_url: job identification
    • failed_steps: which CI steps failed (e.g., "Step 6: Run tests")
    • log_index: array of interesting lines (errors, warnings, failures) with line numbers
    • excerpt: ~80 line curated window around the last error
    • full_log_path: path to complete log file for deeper investigation

log_index types:

  • error: lines matching ##[error], Error:, ERR_, exit code N
  • warning: lines matching ##[warning], WARN
  • failure: lines matching N failed, FAIL,
  • trace: stack trace lines (deduplicated)

workflow for using results:

  1. scan log_index to see where errors/warnings/failures are located in the log
  2. read excerpt for immediate context around the main error
  3. if excerpt doesn't show what you need, read specific line ranges from full_log_path
  4. check failed_steps and read the workflow yml to understand what command failed

example:

// when handling a check_suite_completed webhook
const result = await mcp.call("gh_pullfrog/get_check_suite_logs", {
  check_suite_id: check_suite.id
});

// result.failed_jobs[0].log_index shows:
// [
//   { line: 181, content: "WARN  Failed to create bin...", type: "warning" },
//   { line: 1079, content: "Error: expect(received).toBe(expected)", type: "error" },
//   ...
// ]
// use these line numbers to read specific sections from full_log_path

review tools

get_review_comments

get all line-by-line comments for a specific pull request review, including full thread context for replies.

parameters:

  • pull_number (number): the pull request number
  • review_id (number): the id from review.id in the webhook payload
  • approved_by (string, optional): only return comments this user gave a 👍 to

replaces: gh api repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments

returns:

  • commentsPath: path to XML file with full comment details
  • reviewer: github username of the review author
  • count: number of comments to address

output format (XML):

<review_comments count="2" reviewer="colinmcd94">

<summary>
  <comment id="67890" file="src/utils/auth.ts" line="42">Actually, can you use a type guard...</comment>
  <comment id="67891" file="src/api/handler.ts" line="15">This should handle the error case</comment>
</summary>

<comment id="67890" file="src/utils/auth.ts" line="42" author="colinmcd94">
  <thread>
    <message id="12345" author="colinmcd94">Please add null checking here</message>
    <message id="23456" author="octocat">What about using optional chaining?</message>
  </thread>
  <diff>
@@ -40,7 +40,7 @@
   const user = getUser(id);
-  return user.name;
+  return user?.name;
  </diff>
  <body>Actually, can you use a type guard instead?</body>
</comment>

</review_comments>
  • <summary> lists all comments to address with truncated preview
  • <thread> shows parent comments (when replying to existing thread)
  • <diff> contains the diff hunk around the commented line
  • <body> is the actual comment text to address

example:

// when handling a pull_request_review_submitted webhook
await mcp.call("gh_pullfrog/get_review_comments", {
  pull_number: 47,
  review_id: review.id
});

list_pull_request_reviews

list all reviews for a pull request.

parameters:

  • pull_number (number): the pull request number

replaces: gh api repos/{owner}/{repo}/pulls/{pull_number}/reviews

returns: array of reviews with:

  • review id, body, state (approved/changes_requested/commented)
  • user, commit_id, submitted_at, html_url

example:

await mcp.call("gh_pullfrog/list_pull_request_reviews", {
  pull_number: 47
});

reply_to_review_comment

reply to a PR review comment thread explaining how the feedback was addressed.

parameters:

  • pull_number (number): the pull request number
  • comment_id (number): the ID of the review comment to reply to
  • body (string): the reply text explaining how the feedback was addressed

replaces: gh api repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies

returns: the created reply comment including:

  • comment id, body, html_url
  • in_reply_to_id showing it's a reply to the specified comment

example:

// after addressing a review comment
await mcp.call("gh_pullfrog/reply_to_review_comment", {
  pull_number: 47,
  comment_id: 2567334961,
  body: "removed the function as requested"
});

output tools

set_output

set the action output for consumption by subsequent workflow steps. useful when pullfrog is used as a step in a user-defined CI workflow (e.g., generating release notes).

parameters:

  • value (string): the output value to expose

returns:

  • success: true on success

the value will be available as the result output of the action, accessible via ${{ steps.<step-id>.outputs.result }}.

example:

// when generating content for downstream consumption
await mcp.call("gh_pullfrog/set_output", {
  value: "## Release Notes\n\n- Added new feature X\n- Fixed bug Y"
});

usage in workflow:

- uses: pullfrog/pullfrog@v1
  id: notes
  with:
    prompt: "Generate release notes for v2.0.0"

- uses: softprops/action-gh-release@v1
  with:
    body: ${{ steps.notes.outputs.result }}

other tools

see individual files for documentation on other tools:

  • comment.ts - create, edit, and update comments
  • issue.ts - create issues
  • output.ts - set action output for workflow consumption
  • pr.ts - create pull requests
  • prInfo.ts - get pull request information
  • review.ts - create pull request reviews
  • delegate.ts - delegate task to a subagent with a specific mode and effort level

usage in agents

agents should prefer using the mcp tools provided by this server. the gh cli is available as a fallback if needed, but mcp tools handle authentication and provide better integration.

the agent instructions automatically include guidance on using these tools.