prompt-design
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.
More from xmcp-dev/skills
widget-design
Best practices for designing UI widgets in xmcp. Use when creating interactive widgets for GPT Apps or MCP Apps, choosing between React components and template literals, designing widget layouts, handling state and data fetching, or troubleshooting widget rendering issues.
28resource-design
Design MCP resources to expose content for LLM consumption. Use when creating static or dynamic resources in xmcp.
27