Add set_output tool (#205)

This commit is contained in:
Mateusz Burzyński
2026-01-29 22:49:00 +00:00
committed by pullfrog[bot]
parent 2daab6fc78
commit c1f8247077
9 changed files with 116 additions and 7 deletions
+34
View File
@@ -154,11 +154,45 @@ await mcp.call("gh_pullfrog/reply_to_review_comment", {
});
```
### 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:**
```typescript
// 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:**
```yaml
- 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
+20
View File
@@ -0,0 +1,20 @@
import { type } from "arktype";
import type { ToolContext } from "./server.ts";
import { execute, tool } from "./shared.ts";
export const SetOutputParams = type({
value: type.string.describe("the output value to expose as a GitHub Action output"),
});
export function SetOutputTool(ctx: ToolContext) {
return tool({
name: "set_output",
description:
"Set the action output for consumption by subsequent workflow steps. The value will be available as the 'result' output of the action.",
parameters: SetOutputParams,
execute: execute(async (params) => {
ctx.toolState.output = params.value;
return { success: true };
}),
});
}
+3
View File
@@ -32,6 +32,7 @@ export interface ToolState {
progressCommentId: number | null;
lastProgressBody?: string;
wasUpdated?: boolean;
output?: string;
}
import type { ResolveRunResult } from "../utils/workflow.ts";
@@ -85,6 +86,7 @@ import { GetIssueCommentsTool } from "./issueComments.ts";
import { GetIssueEventsTool } from "./issueEvents.ts";
import { IssueInfoTool } from "./issueInfo.ts";
import { AddLabelsTool } from "./labels.ts";
import { SetOutputTool } from "./output.ts";
import { CreatePullRequestTool } from "./pr.ts";
import { PullRequestInfoTool } from "./prInfo.ts";
import { CreatePullRequestReviewTool } from "./review.ts";
@@ -179,6 +181,7 @@ export async function startMcpHttpServer(
CommitFilesTool(ctx),
PushBranchTool(ctx),
UploadFileTool(ctx),
SetOutputTool(ctx),
];
// only add BashTool when bash is "restricted"