Skip to content

Conversation

@paoloricciuti
Copy link

Partially addresses #806

This adds every prompt in the mcp servers as a slash command...the slashes are named mcp.[servername].[promptname]

Here's how it looks like using it.

Screen.Recording.2025-12-12.at.19.28.11.mov

I've added a "cache" layer so that prompts are only fetched when an MCP server is connected. The value of the prompt is fetched lazily when the user selects it.

If this get's merged, I'll probably work on resources too.

@rekram1-node
Copy link
Collaborator

Yeah ill merge it, maybe have some nits for you but this is good!

@rekram1-node
Copy link
Collaborator

/review

const is_mcp_prompt = !!mcp_prompts[input.command]

let template = ""
if (is_mcp_prompt) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor style suggestion: The let template = "" followed by the if/else assignment could potentially be refactored using an async IIFE pattern to avoid the let statement (see packages/opencode/src/util/iife.ts). However, this is a minor point and the current approach is acceptable given the complexity of the async logic in each branch.

@rekram1-node
Copy link
Collaborator

Do we need the dynamic import for mcp?

@rekram1-node
Copy link
Collaborator

rekram1-node commented Dec 12, 2025

also I wonder if instead of this pattern we should expose ways to add/remove commands on the command namespace and then mcp can just add slash commands / remove them through that?

We kinda have a similar thing for MCP

this is me just glancing over but it's just the way the domains overlap so curious your opinion

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@paoloricciuti
Copy link
Author

Do we need the dynamic import for mcp?

In case we don't have any MCP the slash command will always be a normal command. With the dynamic import we will avoid importing the module all together. Not necessary and I'm willing to refactor but seems like a nice addition

@paoloricciuti
Copy link
Author

also I wonder if instead of this pattern we should expose ways to add/remove commands on the command namespace and then mcp can just add slash commands / remove them through that?

We kinda have a similar thing for MCP

this is me just glancing over but it's just the way the domains overlap so curious your opinion

We could also do that but it would still require custom logic because the template of the prompt is "special". But yeah I guess it's just a matter of who owns what. You definitely have more experience in the codebase so up to you to take the call. Just let me know and I'll refactor it eventually.

@paoloricciuti
Copy link
Author

@rekram1-node shouln not have trusted the review 😅 I actually removed the snake_case now without type errors

@kziemski
Copy link

@rekram1-node @paoloricciuti i've tested the original pr against basicmemory and it worked great so far. dependent on an mcp server properly handling prompts in terms of error handling but thats not the problem of the pr implementation. this and getting resources in would be amazing.

@paoloricciuti
Copy link
Author

@kziemski glad to hear... I'm gonna work on resources immediately after this gets merged

@rekram1-node
Copy link
Collaborator

planning to merge today

@paoloricciuti
Copy link
Author

Btw I think I have the resource PR basically ready... I'll wait anyway, so this doesn't become a huge PR and there will be fewer conflicts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants