-
Notifications
You must be signed in to change notification settings - Fork 31.8k
MCP Tool Dropdown UX Improvements #246287
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
I've created a new UX improvement issue 🧐 |
Overall I really like the direction here. |
This comment has been minimized.
This comment has been minimized.
Ahh right! Thank you for calling this out @isidorn! I totally forgot to include a note saying that I'm actually not a big fan of the current copy and would explicitly love some feedback on this. Perhaps cc @ntrogh With that said, I'm actually not totally against the idea of cutting this text and moving it to a hover (button hover??). I can see an argument that you'll see that server first-run card a fair few times, so that could carry nearly all of the weight for this UX pattern. @kkbrooks would also like your input on this. |
Looks really nice! I'm just not sure when exactly the "server run confirmation" shows- at this point, the server has been started, we have to do this before sending the request. So then it's just a two-step confirmation each time a tool from that server is used? Having the "always allow" option implies that if I just click "Continue", then I would see that server confirmation next time as well? |
My thinking was that this would be shown right before the first tool call from any server that hasn't yet been run in the current chat session. But to your wider implied point, this is definitely one of the weird oddities of this UI that could be worth discussing more. The card implies that the server hasn't started yet (even though it has). I tried my very best to be precise with the language in the card –– I don't actually say anything about the server already running or not, just that it/it's tools are about to be used for the first time (in this session).
No, by default this would only be shown one time per chat session per server. You can kind of think of it as granting permission for the server to be used during that session. Individual tool calls from that server will still be prompted, however.
Yes, the default would be to re-show this confirmation dialog for each new chat session. My thinking was that "always allow" would mean you would never see that confirmation card ever again. Unless you manually go into the settings and revoke that permission, that server will be allowed to be run across all chat sessions and workspaces. But again, individual tool calls from that server will still be prompted (unless you grant permission for specific individual tools to run without manual confirmation). |
@hawkticehurst I'd recommend checking the string in Writer to see what it comes up with based on the Microsoft style guides. I think @ntrogh is already out on holiday so let's see how far that can get us while he's away. He can give his expert opinion when he returns 😄
I think Always Allow would be good. Might be worth looking at the Microsoft sign in flow because they have a similar concept. I think they have something like "don't show again" (that never actually works). |
After some iteration, how do folks feel about "Review tool details in the dropdown before continuing."? I specifically like that there's now a clear indication that you are supposed to review the contents inside the dropdown. I had gotten feedback during some design crits last week that expanding the dropdown to find tool details would be easy to miss without some more explicit direction. ![]() |
To focus the conversation this could be removed it from this UX discussion. I'd think I enable a server when I install it or once I click the checkbox in the tool picker; not having it in every new session in the chat. Worst case that it further worsens the approval-blindness.
Do we show
This seems noise, when imagine getting this UI 15 times per session. Maybe it can be limited to the first tool call during a session? |
Do you have the tool confirmation collapsed by default? Could we just have it expanded by default (or maybe not even collapsible, you just see part of the description with 'see more', and the input editor, capped at ~5 lines and scrolling). Is the argument for that just that it would be noisy? I was just thinking about this today because I was using some MCP tools that I'm not familiar with, and we have this nice keyboard shortcut to run the tool, but I didn't think that I could really make an informed decision without grabbing my mouse to click and seeing the input anyway. |
I've seen many MCP demos and very few users ever open the tools even though it would help to explain what's happening behind the scenes. +1 on keyboard shortcuts to expand and confirm.
I think it has to be clear that this step is waiting on user interaction, which a small play button might not convey as well. I'd also want the "allow always" buttons to be more visible by default (I pick them based on the tool, not the input). Adding to the line of thought: Remove cancel button. The user could as well just reply in the chat input. Maybe we can also introduce a more visible "stop" UI closer to where the streaming is happening. |
Yeah @digitarald and I chatted offline today and I can get behind removing the server first run card! For posterity, the initial motivation for this first-time server card was the belief that we should be showing a warning more prominently (vs hiding it away), since the potential risk to your machine is very high when using an MCP server. I had tried to move the current warning outside of the tool dropdown, but it made the card feel really clunky/information dense, so I ultimately landed on the idea of a new separate card that would show up right before any tool calls are made. But after the chat with Harald, we decided prioritizing a UX that keeps people in a smooth flow state is more important here. So I'll update the OG post and will update some of the designs to reflect this.
@digitarald could you explain this a bit more? What does "go through the source of that tool" mean? Regardless, I can reach out to our icon designer David and see if we can come up with some ideas for this! Just to reconfirm, the only two types of tools that will run via this UI are from MCP servers and extensions correct?
Yeah that's fair feedback. It'll ultimately just become something that folks ignore pretty quickly and just take up visual space, so I'm happy to look into ways that we can remove it. With that said, I'm not sure I like the idea of showing this message on the first tool call, just because this message is so co-located with the tool itself. I worry that it would make it look like the first tool to be run is "extra risky" while the others are not.
Echoing @digitarald's point, I unfortunately do think it's something that a lot of people will miss. The concern that this dropdown is not discoverable enough, was a pretty consistent bit of feedback I got while gathering feedback on this work.
I really love the UI mock you proposed @connor4312! I spent several design iterations exploring something very similar, but your proposal is even cleaner than where I got with it! Sadly, I ultimately agree with @digitarald though, I worry it would be too easy to miss that there's an action that the user needs to take here.
@roblourens yep pretty much. But honestly, at this point I'm willing to give an already expanded tool card a shot. It would solve several of the problems mentioned above regarding discoverability.
I actually quite like this 🧐 We could replace cancel with "Always allow" and then I do actually have some ideas for moving the stop UI to a more discoverable place. Changing the current UI has been something I've been meaning to file an issue about. |
I wonder if we could also use some gentle motion animation to hint to the user that it's waiting for them.
I wonder what you're thinking of showing when there is substantial input to the tool. What you have shown is not too noisy but with more input I think it could noisy to the point where I would not want it expanded by default |
My thinking is that the Input section will get the same "See more" treatment. The result is that by default you will only see one line of text for the description and input. I can send a new mock that demos a long input. |
I like this expanded design. For the input editor, I think I'd rather have it capped to some max # of lines, and scrollable, than click to expand. Because there will still be cases with very long inputs. |
Oh great call out. I'm mostly on board with this idea, but the one call out I'll make is that this would result in a scrolling container inside a scrolling container which I generally try to avoid due to the scroll trapping that can happen. But with the length of output responses I've seen from tools, I think the trade off is probably worth it here. |
Cataloging a list of various UX improvements to VS Code's MCP Tool Dropdown / Confirmation Card that we should discuss / implement for the April 2025 milestone.
Companion issue: #245721
Add first-time server run confirmation cardEDIT: Decided to cut this proposal/idea. See discussion below.
Currently there's a warning attached to every single tool call along the lines of:> This tool is from 'filesystem' (MCP Server). Note that MCP servers or malicious conversation content may attempt to misuse 'Code - Insiders' through tools. Please carefully review any requested actions.I think we can offload a lot of this language to a single confirmation card that is shown when a new MCP server is used for the first time in any given chat session.Goal: Allow us to simplify the language used in individual tool confirmation cardsGoal: Surface server level controls right in chatAllow server to run for the current chat session (default) –– Least trustAllow server to run in the current workspace –– Medium trustAllow server to always run –– Most trustAdd more information to tool dropdown closed state
Currently, the closed state of a tool dropdown only shows the name of the tool that will be run and buttons to continue or cancel the tool run. I propose that we also add the server name and simplified text warning/prompting folks to review what the tool will do before proceeding.
Design note: "Run {tool_name}" uses the
foreground
color token, while server name and warning text usesdescriptionForeground
.Human readable tool names
@digitarald pointed out that the MCP spec now includes the ability to include a human readable tool name. It seems like most (all?) MCP servers have not started to use this yet, but as they do we should be prepared to gracefully "upgrade" to use this name instead of the "raw" tool name.
Wrap long content in see more/see less UI and add input label
Currently, tool descriptions are rendered inside tool dropdowns without any alterations. This is fine for short descriptions but they can get quite long, so we should wrap long content in a See more / See less collapsible UI.
Additionally, we do not label tool input and think we should.
See more/see less closed:
See more/see less expanded:
Add more information to post-tool-run dropdown
Currently, post-tool-run dropdown just include an unlabeled JSON/text snippet of the tool run output. I propose we add the following:
Note that all of these can be wrapped in the collapsible See more / See less UI mentioned above if needed. Additionally, add a green check mark to the far right of the tool run dropdown title section.
Overall tool dropdown UI polish
While a lot of UI changes/polish have already been demonstrated in the screenshots above, two more updates that haven't been noted yet are:
The text was updated successfully, but these errors were encountered: