summaryrefslogtreecommitdiff
path: root/packages/core/src/prompts/prompt-registry.ts
diff options
context:
space:
mode:
authorchristine betts <[email protected]>2025-07-25 20:56:33 +0000
committerGitHub <[email protected]>2025-07-25 20:56:33 +0000
commiteb65034117f7722554a717de034e891ba1996e93 (patch)
treef279bee5ca55b0e447eabc70a11e96de307d76f3 /packages/core/src/prompts/prompt-registry.ts
parentde968877895a8ae5f0edb83a43b37fa190cc8ec9 (diff)
Load and use MCP server prompts as slash commands in the CLI (#4828)
Co-authored-by: harold <[email protected]> Co-authored-by: N. Taylor Mullen <[email protected]>
Diffstat (limited to 'packages/core/src/prompts/prompt-registry.ts')
-rw-r--r--packages/core/src/prompts/prompt-registry.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/core/src/prompts/prompt-registry.ts b/packages/core/src/prompts/prompt-registry.ts
new file mode 100644
index 00000000..56699130
--- /dev/null
+++ b/packages/core/src/prompts/prompt-registry.ts
@@ -0,0 +1,56 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { DiscoveredMCPPrompt } from '../tools/mcp-client.js';
+
+export class PromptRegistry {
+ private prompts: Map<string, DiscoveredMCPPrompt> = new Map();
+
+ /**
+ * Registers a prompt definition.
+ * @param prompt - The prompt object containing schema and execution logic.
+ */
+ registerPrompt(prompt: DiscoveredMCPPrompt): void {
+ if (this.prompts.has(prompt.name)) {
+ const newName = `${prompt.serverName}_${prompt.name}`;
+ console.warn(
+ `Prompt with name "${prompt.name}" is already registered. Renaming to "${newName}".`,
+ );
+ this.prompts.set(newName, { ...prompt, name: newName });
+ } else {
+ this.prompts.set(prompt.name, prompt);
+ }
+ }
+
+ /**
+ * Returns an array of all registered and discovered prompt instances.
+ */
+ getAllPrompts(): DiscoveredMCPPrompt[] {
+ return Array.from(this.prompts.values()).sort((a, b) =>
+ a.name.localeCompare(b.name),
+ );
+ }
+
+ /**
+ * Get the definition of a specific prompt.
+ */
+ getPrompt(name: string): DiscoveredMCPPrompt | undefined {
+ return this.prompts.get(name);
+ }
+
+ /**
+ * Returns an array of prompts registered from a specific MCP server.
+ */
+ getPromptsByServer(serverName: string): DiscoveredMCPPrompt[] {
+ const serverPrompts: DiscoveredMCPPrompt[] = [];
+ for (const prompt of this.prompts.values()) {
+ if (prompt.serverName === serverName) {
+ serverPrompts.push(prompt);
+ }
+ }
+ return serverPrompts.sort((a, b) => a.name.localeCompare(b.name));
+ }
+}