Skip to content

Commit 4e8eb81

Browse files
mattdhollowaytommaso-moroCopilotCopilotCopilot
authored
MCP Apps with extra functionality (#1974)
* PoC full flow (hello world example) * add avatar resource domain * add postmessage logic and richer UI * add create issue ui * update ui for issue creatioon * fix * ignore banner * update docs after rebase * update toolsnap for get_me * new UI changes * update docs * update workflows that need ui build * add UI diff * fix build ui step for windows runners to use git bash * fix UI diff * refactor issue creation UI * add AvatarWithFallback component and update UserCard to use it; enhance CreateIssueApp to manage existing issue data * fix formatting of button labels * add create pull request functionality with UI support and insiders * update docs * add test for insiders mode handling in ServerTool schema * remove `show_ui` param for now * make insiders mode metadata stripping generic * remove ui diff * fix CI * remove redundant mention of old app name * add node types to fix ide issues for ts code * remove unused TriangleDownIcon import * update @primer/behaviors and electron-to-chromium versions in package-lock.json * add check to ensure base and head are not the same when creating a new PR * remove old show_ui * fix gitignore for dist so builds dont break * add tests for insiders mode handling and metadata stripping in ServerTool * remove unused state and components from CreatePRApp * fix ui build * update docker build to fix npm issue * remove reference to show_ui * allow insiders to work for non-ui features * formalise insiders inventory support * update docs * fix overflow issues and replace pull request dropdown with matching UI from dotcom * fix createpullrequest test * consolidate fetching tools under `ui_get` tool to remove toolset deps * fix issue data prefill in issue_write form * fix link component when updating issue * fix avatar URL * fix broken issue update logic * remove dbg * fix for new GetFlags * revert to original required fields for create_pull_request * fix for UI form submission * Simplify MCP App UIs for basic branch Remove advanced features to be kept in mcp-ui-apps-advanced: - Strip labels, assignees, milestones, issue types, repo picker from issue-write - Strip repo picker, branch selectors from pr-write - Delete ui_get tool (ui_tools.go, ui_tools_test.go, ui_get.snap) - Remove UIGet registration from tools.go Basic forms retain: title, body, submit with _ui_submitted, draft/regular split button (PR), MarkdownEditor, and SuccessView. * Fix header spacing in issue-write and pr-write UIs Add proper spacing between icon, title text, and repo name in the header bar for both issue-write and create-pull-request forms. * fix UI spacing * Revert "Simplify MCP App UIs for basic branch" This reverts commit 24174b9. * Undo dependency downgrades in ui/package-lock.json * Update ui/src/apps/pr-write/App.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update ui/src/apps/issue-write/App.tsx Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Implement pagination for uiGetBranches (#2012) * Initial plan * Implement pagination for uiGetBranches function Co-authored-by: mattdholloway <918573+mattdholloway@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: mattdholloway <918573+mattdholloway@users.noreply.github.com> * update to new insiders feature flag func * ensure transient state is reset on successive tool calls * Mark ui_get as app-only visibility ui_get backs only the MCP App views and has no business in the agent's tool list. Per the MCP Apps 2026-01-26 spec, omitting _meta.ui.visibility defaults to ["model","app"], which exposes the tool to the model. Declare visibility ["app"] so the host hides it from tools/list while the views can still invoke it via tools/call. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update ui_get toolsnap for app-only visibility Regenerated via UPDATE_TOOLSNAPS to capture the new _meta.ui.visibility. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Assert ui_get declares app-only visibility Locks in the _meta.ui.visibility ["app"] contract so a future edit can't silently re-expose the UI data tool to the model. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add ui_get to insiders feature docs Regenerated docs/feature-flags.md and docs/insiders-features.md to include the ui_get tool entry. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address ui_get review feedback - Paginate the labels GraphQL query (cursor-based) so repos with more than 100 labels return a complete list instead of silently truncating. - Emit an empty due_on for milestones without a due date instead of formatting the zero time as "0001-01-01". - Use NewGitHubAPIErrorResponse in uiGetIssueTypes to preserve GitHub response context, matching the other REST-backed methods. - Extend tests to cover the labels (GraphQL), milestones (including the no-due-date case) and issue_types methods, plus the issue_types error path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix repo reset and stale base-branch in MCP App views - Re-initialize selectedRepo from toolInput inside the reset-on-invocation effect instead of a separate effect. The two effects both depended on toolInput and ran in declaration order, so the reset wiped the just- initialized repo and the picker never reflected the invocation's owner/repo. - Set the default base branch with a functional update in pr-write so a base prefilled from toolInput.base (or chosen by the user) isn't overwritten by a stale baseBranch value captured before the branches request resolved. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Fix issue-write repo owner mapping and clear stale UI state on reset - issue-write: derive owner/name from full_name since search_repositories minimal output omits the owner object (mirrors pr-write) - pr-write/issue-write: clear available branch/label/assignee/milestone/type lists and filters in the toolInput reset effect so prefill effects can't match against the previous repo's stale data Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Merge remote-tracking branch 'origin/main' into mcp-ui-apps-advanced * feat: add pull request editing functionality with reviewers support * feat: implement interactive form handling for issue and pull request creation and updates * Close response body per page in ui_get pagination loops Avoids leaking HTTP connections when paging through assignees, milestones, branches, collaborators, and teams. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Cache pr-edit.html in build-ui action The build-ui cache only saved get-me/issue-write/pr-write HTML, so once a cache entry was stored it restored an incomplete ui_dist on later runs and skipped the rebuild, leaving pr-edit.html absent and panicking the tests. Add pr-edit.html to the cached paths and bump the cache key to v2 to evict the incomplete entries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: tommaso-moro <tommaso-moro@github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 6586b84 commit 4e8eb81

22 files changed

Lines changed: 4041 additions & 228 deletions

.github/actions/build-ui/action.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ runs:
1212
pkg/github/ui_dist/get-me.html
1313
pkg/github/ui_dist/issue-write.html
1414
pkg/github/ui_dist/pr-write.html
15-
key: ui-dist-v1-${{ hashFiles('ui/package-lock.json', 'ui/package.json', 'ui/index.html', 'ui/tsconfig*.json', 'ui/vite.config.ts', 'ui/src/**', 'ui/scripts/**') }}
15+
pkg/github/ui_dist/pr-edit.html
16+
key: ui-dist-v2-${{ hashFiles('ui/package-lock.json', 'ui/package.json', 'ui/index.html', 'ui/tsconfig*.json', 'ui/vite.config.ts', 'ui/src/**', 'ui/scripts/**') }}
1617
enableCrossOsArchive: true
1718

1819
- name: Set up Node.js

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,7 @@ The following sets of tools are available:
10901090
- `maintainer_can_modify`: Allow maintainer edits (boolean, optional)
10911091
- `owner`: Repository owner (string, required)
10921092
- `repo`: Repository name (string, required)
1093+
- `reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
10931094
- `title`: PR title (string, required)
10941095

10951096
- **list_pull_requests** - List pull requests

docs/feature-flags.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ runtime behavior (such as output formatting) won't appear here.
4444
- `maintainer_can_modify`: Allow maintainer edits (boolean, optional)
4545
- `owner`: Repository owner (string, required)
4646
- `repo`: Repository name (string, required)
47-
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like reviewers) and the user has already confirmed the action. (boolean, optional, conditional — only visible to clients that advertise MCP App UI support)
47+
- `reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
48+
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like reviewers) and the user has already confirmed the action. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
4849
- `title`: PR title (string, required)
4950

5051
- **get_me** - Get my user profile
@@ -67,12 +68,33 @@ runtime behavior (such as output formatting) won't appear here.
6768
- `milestone`: Milestone number (number, optional)
6869
- `owner`: Repository owner (string, required)
6970
- `repo`: Repository name (string, required)
70-
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like labels, assignees, milestone, type, or state changes) and the user has already confirmed the action. (boolean, optional, conditional — only visible to clients that advertise MCP App UI support)
71+
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like labels, assignees, milestone, type, or state changes) and the user has already confirmed the action. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
7172
- `state`: New state (string, optional)
7273
- `state_reason`: Reason for the state change. Ignored unless state is changed. (string, optional)
7374
- `title`: Issue title (string, optional)
7475
- `type`: Type of this issue. Only use if the repository has issue types configured. Use list_issue_types tool to get valid type values for the organization. If the repository doesn't support issue types, omit this parameter. (string, optional)
7576

77+
- **ui_get** - Get UI data
78+
- **Required OAuth Scopes**: `repo`, `read:org`
79+
- **Accepted OAuth Scopes**: `admin:org`, `read:org`, `repo`, `write:org`
80+
- `method`: The type of data to fetch (string, required)
81+
- `owner`: Repository owner (required for all methods) (string, required)
82+
- `repo`: Repository name (required for labels, assignees, milestones, branches, issue fields, reviewers) (string, optional)
83+
84+
- **update_pull_request** - Edit pull request
85+
- **Required OAuth Scopes**: `repo`
86+
- **MCP App UI**: `ui://github-mcp-server/pr-edit`
87+
- `base`: New base branch name (string, optional)
88+
- `body`: New description (string, optional)
89+
- `draft`: Mark pull request as draft (true) or ready for review (false) (boolean, optional)
90+
- `maintainer_can_modify`: Allow maintainer edits (boolean, optional)
91+
- `owner`: Repository owner (string, required)
92+
- `pullNumber`: Pull request number to update (number, required)
93+
- `repo`: Repository name (string, required)
94+
- `reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
95+
- `state`: New state (string, optional)
96+
- `title`: New title (string, optional)
97+
7698
### `remote_mcp_issue_fields`
7799

78100
- **issue_write** - Create or update issue/pull request

docs/insiders-features.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ The list below is generated from the Go source. It covers tool **inventory and s
3838
- `maintainer_can_modify`: Allow maintainer edits (boolean, optional)
3939
- `owner`: Repository owner (string, required)
4040
- `repo`: Repository name (string, required)
41-
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like reviewers) and the user has already confirmed the action. (boolean, optional, conditional — only visible to clients that advertise MCP App UI support)
41+
- `reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
42+
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like reviewers) and the user has already confirmed the action. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
4243
- `title`: PR title (string, required)
4344

4445
- **get_me** - Get my user profile
@@ -61,12 +62,33 @@ The list below is generated from the Go source. It covers tool **inventory and s
6162
- `milestone`: Milestone number (number, optional)
6263
- `owner`: Repository owner (string, required)
6364
- `repo`: Repository name (string, required)
64-
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like labels, assignees, milestone, type, or state changes) and the user has already confirmed the action. (boolean, optional, conditional — only visible to clients that advertise MCP App UI support)
65+
- `show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like labels, assignees, milestone, type, or state changes) and the user has already confirmed the action. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
6566
- `state`: New state (string, optional)
6667
- `state_reason`: Reason for the state change. Ignored unless state is changed. (string, optional)
6768
- `title`: Issue title (string, optional)
6869
- `type`: Type of this issue. Only use if the repository has issue types configured. Use list_issue_types tool to get valid type values for the organization. If the repository doesn't support issue types, omit this parameter. (string, optional)
6970

71+
- **ui_get** - Get UI data
72+
- **Required OAuth Scopes**: `repo`, `read:org`
73+
- **Accepted OAuth Scopes**: `admin:org`, `read:org`, `repo`, `write:org`
74+
- `method`: The type of data to fetch (string, required)
75+
- `owner`: Repository owner (required for all methods) (string, required)
76+
- `repo`: Repository name (required for labels, assignees, milestones, branches, issue fields, reviewers) (string, optional)
77+
78+
- **update_pull_request** - Edit pull request
79+
- **Required OAuth Scopes**: `repo`
80+
- **MCP App UI**: `ui://github-mcp-server/pr-edit`
81+
- `base`: New base branch name (string, optional)
82+
- `body`: New description (string, optional)
83+
- `draft`: Mark pull request as draft (true) or ready for review (false) (boolean, optional)
84+
- `maintainer_can_modify`: Allow maintainer edits (boolean, optional)
85+
- `owner`: Repository owner (string, required)
86+
- `pullNumber`: Pull request number to update (number, required)
87+
- `repo`: Repository name (string, required)
88+
- `reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
89+
- `state`: New state (string, optional)
90+
- `title`: New title (string, optional)
91+
7092
### `remote_mcp_issue_fields`
7193

7294
- **issue_write** - Create or update issue/pull request

pkg/github/__toolsnaps__/create_pull_request.snap

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@
4242
"description": "Repository name",
4343
"type": "string"
4444
},
45+
"reviewers": {
46+
"description": "GitHub usernames or ORG/team-slug team reviewers to request reviews from",
47+
"items": {
48+
"type": "string"
49+
},
50+
"type": "array"
51+
},
4552
"show_ui": {
4653
"description": "Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when you have all required values (especially ones the form does not collect, like reviewers) and the user has already confirmed the action.",
4754
"type": "boolean"
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{
2+
"_meta": {
3+
"ui": {
4+
"visibility": [
5+
"app"
6+
]
7+
}
8+
},
9+
"annotations": {
10+
"readOnlyHint": true,
11+
"title": "Get UI data"
12+
},
13+
"description": "Fetch UI data for MCP Apps (labels, assignees, milestones, issue types, branches, issue fields, reviewers).",
14+
"inputSchema": {
15+
"properties": {
16+
"method": {
17+
"description": "The type of data to fetch",
18+
"enum": [
19+
"labels",
20+
"assignees",
21+
"milestones",
22+
"issue_types",
23+
"branches",
24+
"issue_fields",
25+
"reviewers"
26+
],
27+
"type": "string"
28+
},
29+
"owner": {
30+
"description": "Repository owner (required for all methods)",
31+
"type": "string"
32+
},
33+
"repo": {
34+
"description": "Repository name (required for labels, assignees, milestones, branches, issue fields, reviewers)",
35+
"type": "string"
36+
}
37+
},
38+
"required": [
39+
"method",
40+
"owner"
41+
],
42+
"type": "object"
43+
},
44+
"name": "ui_get"
45+
}

pkg/github/__toolsnaps__/update_pull_request.snap

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
{
2+
"_meta": {
3+
"ui": {
4+
"resourceUri": "ui://github-mcp-server/pr-edit",
5+
"visibility": [
6+
"model",
7+
"app"
8+
]
9+
}
10+
},
211
"annotations": {
312
"title": "Edit pull request"
413
},

pkg/github/issues.go

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1753,8 +1753,7 @@ func searchIssuesHandler(ctx context.Context, deps ToolDependencies, args map[st
17531753
const IssueWriteUIResourceURI = "ui://github-mcp-server/issue-write"
17541754

17551755
// issueWriteFormParams are the parameters the issue_write MCP App form collects
1756-
// and re-sends on submit. The form only supports title/body editing (plus the
1757-
// routing/identity fields), so any other parameter present on a call cannot be
1756+
// and re-sends on submit. Any other parameter present on a call cannot be
17581757
// represented by the form.
17591758
var issueWriteFormParams = map[string]struct{}{
17601759
"method": {},
@@ -1763,13 +1762,17 @@ var issueWriteFormParams = map[string]struct{}{
17631762
"title": {},
17641763
"body": {},
17651764
"issue_number": {},
1765+
"issue_fields": {},
1766+
"state": {},
1767+
"state_reason": {},
1768+
"duplicate_of": {},
17661769
"show_ui": {},
17671770
"_ui_submitted": {},
17681771
}
17691772

17701773
// issueWriteHasNonFormParams reports whether the call carries any parameter the
17711774
// issue_write MCP App form cannot represent (anything outside issueWriteFormParams,
1772-
// e.g. labels, assignees, issue_fields or a state change). Such calls must bypass
1775+
// e.g. labels, assignees, milestones or issue types). Such calls must bypass
17731776
// the UI form and execute directly so the supplied values aren't silently dropped.
17741777
func issueWriteHasNonFormParams(args map[string]any) bool {
17751778
for key, value := range args {
@@ -1783,6 +1786,36 @@ func issueWriteHasNonFormParams(args map[string]any) bool {
17831786
return false
17841787
}
17851788

1789+
// issueWriteAwaitingFormResult builds the "awaiting form submission" stub
1790+
// returned when issue_write hands off to the MCP App form. The body is shared
1791+
// by IssueWrite and LegacyIssueWrite. The result is marked IsError=true so
1792+
// agents that bail on error don't claim success or chain dependent tool calls
1793+
// while the user is still interacting with the form; the host renders the UI
1794+
// regardless because rendering is keyed off the tool's _meta.ui resourceUri.
1795+
func issueWriteAwaitingFormResult(method, owner, repo string, issueNumber int) *mcp.CallToolResult {
1796+
var msg string
1797+
if method == "update" {
1798+
msg = fmt.Sprintf(
1799+
"An interactive form has been shown to the user for editing issue #%d in %s/%s. "+
1800+
"STOP — do not call any other tools, do not respond as if the issue was updated, "+
1801+
"and do not claim the operation succeeded. The issue has NOT been updated yet; "+
1802+
"only the form was rendered. Wait silently for the user to review and click Submit. "+
1803+
"When they do, the real result will be delivered to your context automatically.",
1804+
issueNumber, owner, repo,
1805+
)
1806+
} else {
1807+
msg = fmt.Sprintf(
1808+
"An interactive form has been shown to the user for creating a new issue in %s/%s. "+
1809+
"STOP — do not call any other tools, do not respond as if the issue was created, "+
1810+
"and do not claim the operation succeeded. The issue has NOT been created yet; "+
1811+
"only the form was rendered. Wait silently for the user to review and click Submit. "+
1812+
"When they do, the real result will be delivered to your context automatically.",
1813+
owner, repo,
1814+
)
1815+
}
1816+
return utils.NewToolResultAwaitingFormSubmission(msg)
1817+
}
1818+
17861819
// IssueWrite is the FeatureFlagIssueFields-enabled variant of issue_write
17871820
// (with the issue_fields parameter). LegacyIssueWrite is served when the flag
17881821
// is off. Both register under the tool name "issue_write"; exactly one is
@@ -1953,14 +1986,15 @@ Options are:
19531986
}
19541987

19551988
if deps.IsFeatureEnabled(ctx, MCPAppsFeatureFlag) && clientSupportsUI(ctx, req) && !uiSubmitted && showUI && !issueWriteHasNonFormParams(args) {
1989+
issueNumber := 0
19561990
if method == "update" {
1957-
issueNumber, numErr := RequiredInt(args, "issue_number")
1991+
n, numErr := RequiredInt(args, "issue_number")
19581992
if numErr != nil {
19591993
return utils.NewToolResultError("issue_number is required for update method"), nil, nil
19601994
}
1961-
return utils.NewToolResultText(fmt.Sprintf("Ready to update issue #%d in %s/%s. IMPORTANT: The issue has NOT been updated yet. Do NOT tell the user the issue was updated. The user MUST click Submit in the form to update it.", issueNumber, owner, repo)), nil, nil
1995+
issueNumber = n
19621996
}
1963-
return utils.NewToolResultText(fmt.Sprintf("Ready to create an issue in %s/%s. IMPORTANT: The issue has NOT been created yet. Do NOT tell the user the issue was created. The user MUST click Submit in the form to create it.", owner, repo)), nil, nil
1997+
return issueWriteAwaitingFormResult(method, owner, repo, issueNumber), nil, nil
19641998
}
19651999

19662000
title, err := OptionalParam[string](args, "title")
@@ -2209,14 +2243,15 @@ Options are:
22092243
}
22102244

22112245
if deps.IsFeatureEnabled(ctx, MCPAppsFeatureFlag) && clientSupportsUI(ctx, req) && !uiSubmitted && showUI && !issueWriteHasNonFormParams(args) {
2246+
issueNumber := 0
22122247
if method == "update" {
2213-
issueNumber, numErr := RequiredInt(args, "issue_number")
2248+
n, numErr := RequiredInt(args, "issue_number")
22142249
if numErr != nil {
22152250
return utils.NewToolResultError("issue_number is required for update method"), nil, nil
22162251
}
2217-
return utils.NewToolResultText(fmt.Sprintf("Ready to update issue #%d in %s/%s. IMPORTANT: The issue has NOT been updated yet. Do NOT tell the user the issue was updated. The user MUST click Submit in the form to update it.", issueNumber, owner, repo)), nil, nil
2252+
issueNumber = n
22182253
}
2219-
return utils.NewToolResultText(fmt.Sprintf("Ready to create an issue in %s/%s. IMPORTANT: The issue has NOT been created yet. Do NOT tell the user the issue was created. The user MUST click Submit in the form to create it.", owner, repo)), nil, nil
2254+
return issueWriteAwaitingFormResult(method, owner, repo, issueNumber), nil, nil
22202255
}
22212256

22222257
title, err := OptionalParam[string](args, "title")

0 commit comments

Comments
 (0)