Create xmcp Prompt
You are helping the user create a new xmcp prompt. Follow this interactive workflow.
Step 1: Gather Information
Before generating any code, ask the user these questions using AskUserQuestion:
- •
Prompt name (if not provided): What should the prompt be named? (Use kebab-case)
- •
Prompt type: Ask which type of prompt they need:
- •Simple - Static prompt text without parameters
- •Parameterized - Prompt with user-provided parameters (most common)
- •Multi-content - Returns multiple content blocks (text, images, etc.)
- •
Parameters (if parameterized): What inputs should the prompt accept?
- •Parameter name
- •Type (string, number, enum)
- •Description
- •Whether it's optional
- •Any validation or default values
- •
Role: What role should the prompt assume?
- •user - Prompt from user perspective (most common)
- •assistant - Prompt as assistant response template
- •
Use case: What is the prompt designed for?
- •Code review
- •Documentation generation
- •Data analysis
- •Content creation
- •Other specific task
Step 2: Generate the Prompt
Create the prompt file in src/prompts/:
File Location
src/prompts/{prompt-name}.ts
Prompt Structure Reference
Every xmcp prompt has three main exports:
// 1. Schema (optional) - Define parameters with Zod
export const schema = { /* ... */ };
// 2. Metadata (optional) - Prompt configuration
export const metadata: PromptMetadata = { /* ... */ };
// 3. Handler (required) - Default export function
export default function handler(params?) { /* ... */ }
Quick Reference
Essential Imports
import { type PromptMetadata } from "xmcp";
// For parameterized prompts
import { z } from "zod";
import { type InferSchema, type PromptMetadata } from "xmcp";
Metadata Fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No* | Unique prompt identifier |
title | string | No | Human-readable title |
description | string | No | What this prompt does |
role | string | No | "user" or "assistant" (default: user) |
*When metadata is omitted, xmcp uses the filename as the prompt name.
Handler Return Types
| Return Type | Use Case |
|---|---|
string | Simple text prompt |
{ type: "text", text: string } | Explicit text content |
{ type: "image", data: base64, mimeType: string } | Image content |
Array<Content> | Multiple content blocks |
Use Cases for Server-Exposed Prompts
MCP prompts are useful for:
- •Standardized workflows - Consistent code review, documentation patterns
- •Complex templates - Multi-step analysis prompts with structure
- •Domain expertise - Specialized prompts for specific domains
- •Reusable patterns - Common tasks that benefit from parameterization
- •Client integration - Prompts that MCP clients can discover and use
Detailed Templates
For complete code templates including:
- •Simple prompt patterns
- •Parameterized prompts with Zod schemas
- •Multi-role conversation prompts
- •Autocompletion support
- •Code review and documentation examples
Read: references/patterns.md
Checklist After Generation
- •File created in
src/prompts/{prompt-name}.ts - •If using metadata, ensure it has
name,title, anddescription - •Schema uses
.describe()for all parameters (if parameterized) - •Handler returns appropriate content format
- •Role is set appropriately for the use case
Suggest running pnpm build to verify the prompt compiles correctly.