Prompts are reusable message templates with parameters that help structure AI interactions.
Sign in to save downloads to your library and vote.
Preview
Prompts
Prompts are reusable message templates with parameters that help structure AI interactions.
Use prompts for: Code review templates, summarization patterns, translation templates, instruction templates
Basic Prompt
import { MCPServer, text } from "mcp-use/server";
import { z } from "zod";
const server = new MCPServer({
name: "my-server",
version: "1.0.0",
});
server.prompt(
{
name: "code-review",
description: "Generate a code review prompt for given language",
schema: z.object({
language: z
.string()
.describe("Programming language (e.g., 'TypeScript', 'Python')"),
focusArea: z
.string()
.optional()
.describe(
"Specific area to focus on (e.g., 'security', 'performance')",
),
}),
},
async ({ language, focusArea }) => {
const focus = focusArea ? ` with emphasis on ${focusArea}` : "";
return text(
`Please review this ${language} code for best practices and potential issues${focus}.\n\n` +
`Consider:\n` +
`- Code quality and readability\n` +
`- Potential bugs or edge cases\n` +
`- Performance implications\n` +
`- Security vulnerabilities\n` +
`- Adherence to ${language} idioms`,
);
},
);
Key points:
- First argument: prompt configuration (name, description, schema)
- Second argument: async handler that returns prompt text
- Handler receives validated input matching schema
- Returns
text()ormarkdown()helper with prompt content
Prompt Definition
Name
Use kebab-case, descriptive names:
✅ "code-review"
✅ "summarize-document"
✅ "translate-text"
✅ "explain-concept"
❌ "prompt1"
❌ "review" // Too vague
Description
Explain what the prompt template does:
✅ "Generate a code review prompt for any programming language with optional focus areas"
✅ "Create a translation prompt from source to target language"
✅ "Build a summarization prompt with configurable length and style"
❌ "Code review" // Not descriptive enough
Schema
Define parameters with Zod, always use .describe():
// ✅ Good
z.object({
language: z.string().describe("Programming language to review"),
focusArea: z
.enum(["security", "performance", "style", "bugs"])
.optional()
.describe("Specific aspect to focus on"),
severity: z
.enum(["all", "critical", "major"])
.default("all")
.describe("Minimum issue severity to report"),
});
// ❌ Bad - no descriptions
z.object({
language: z.string(),
focusArea: z.string().optional(),
});
Common Prompt Patterns
Code Review
server.prompt(
{
name: "code-review",
description: "Generate code review instructions",
schema: z.object({
language: z.string().describe("Programming language"),
style: z
.enum(["strict", "moderate", "lenient"])
.optional()
.describe("Review strictness"),
}),
},
async ({ language, style = "moderate" }) => {
const strictness = {
strict:
"Be thorough and point out all issues, including minor style problems.",
moderate: "Focus on significant issues and best practices.",
lenient: "Only highlight critical bugs and security issues.",
};
return text(
`Review this ${language} code.\n\n` +
`${strictness[style]}\n\n` +
`Check for:\n` +
`- Correctness and potential bugs\n` +
`- Security vulnerabilities\n` +
`- Performance issues\n` +
`- Code clarity and maintainability`,
);
},
);
Summarization
server.prompt(
{
name: "summarize",
description: "Create a summarization prompt",
schema: z.object({
length: z
.enum(["brief", "medium", "detailed"])
.describe("Summary length"),
format: z
.enum(["paragraph", "bullets", "outline"])
.describe("Output format"),
}),
},
async ({ length, format }) => {
const lengthGuide = {
brief: "2-3 sentences",
medium: "1 paragraph (5-7 sentences)",
detailed: "2-3 paragraphs with key points",
};
const formatGuide = {
paragraph: "as a cohesive paragraph",
bullets: "as bullet points",
outline: "as a hierarchical outline",
};
return text(
`Summarize the following content in ${lengthGuide[length]} ` +
`${formatGuide[format]}.\n\n` +
`Focus on the main points and key takeaways.`,
);
},
);
Translation
server.prompt(
{
name: "translate",
description: "Generate translation instructions",
schema: z.object({
sourceLang: z.string().describe("Source language"),
targetLang: z.string().describe("Target language"),
tone: z
.enum(["formal", "casual", "technical"])
.optional()
.describe("Translation tone"),
}),
},
async ({ sourceLang, targetLang, tone = "formal" }) => {
return text(
`Translate the following text from ${sourceLang} to ${targetLang}.\n\n` +
`Maintain a ${tone} tone.\n` +
`Preserve the original meaning and nuance.\n` +
`Keep any technical terms or proper nouns intact unless they have established translations.`,
);
},
);
Explanation
server.prompt(
{
name: "explain-concept",
description: "Generate explanation instructions for technical concepts",
schema: z.object({
concept: z.string().describe("Concept to explain"),
audience: z
.enum(["beginner", "intermediate", "expert"])
.describe("Target audience"),
includeExamples: z
.boolean()
.default(true)
.describe("Include code examples"),
}),
},
async ({ concept, audience, includeExamples }) => {
const audienceLevel = {
beginner: "someone new to programming",
intermediate: "a developer with 1-2 years experience",
expert: "an experienced software engineer",
};
let prompt = `Explain ${concept} to ${audienceLevel[audience]}.\n\n`;
if (includeExamples) {
prompt += `Include practical code examples.\n`;
}
prompt += `Use clear language and avoid unnecessary jargon.`;
return text(prompt);
},
);
Markdown Prompts
For longer, structured prompts use markdown():
import { markdown } from "mcp-use/server";
server.prompt(
{
name: "api-design-review",
description: "Generate comprehensive API design review prompt",
schema: z.object({
apiType: z.enum(["REST", "GraphQL", "gRPC"]).describe("API type"),
}),
},
async ({ apiType }) => {
return markdown(`
# ${apiType} API Design Review
Please review this ${apiType} API design for the following aspects:
## 1. Design Quality
- RESTful principles (if REST)
- Resource naming and structure
- Consistency across endpoints
- Use of HTTP methods appropriately
## 2. Security
- Authentication/authorization strategy
- Input validation
- Rate limiting considerations
- Sensitive data handling
## 3. Performance
- Pagination strategy
- Caching headers
- Payload size optimization
- N+1 query prevention
## 4. Developer Experience
- Clear, predictable patterns
- Good error messages
- Comprehensive examples
- Documentation clarity
## 5. Versioning & Evolution
- Versioning strategy
- Backward compatibility
- Deprecation plan
Please provide specific, actionable feedback with examples.
`);
},
);
Dynamic Prompts
Build prompts that adapt based on context:
server.prompt(
{
name: "debug-help",
description: "Generate debugging assistance prompt",
schema: z.object({
errorType: z
.string()
.describe("Type of error (e.g., 'TypeError', 'NetworkError')"),
language: z.string().describe("Programming language"),
hasStackTrace: z.boolean().describe("Whether a stack trace is available"),
}),
},
async ({ errorType, language, hasStackTrace }) => {
let prompt = `Help me debug this ${errorType} in ${language}.\n\n`;
if (hasStackTrace) {
prompt += `I have a stack trace. Please:\n`;
prompt += `1. Identify the root cause from the stack trace\n`;
prompt += `2. Explain why this error occurred\n`;
prompt += `3. Suggest fixes with code examples\n`;
} else {
prompt += `I don't have a full stack trace. Please:\n`;
prompt += `1. Ask questions to narrow down the issue\n`;
prompt += `2. Suggest common causes of ${errorType}\n`;
prompt += `3. Recommend debugging steps\n`;
}
return text(prompt);
},
);
Multi-Step Prompts
Chain multiple prompts for complex workflows:
server.prompt(
{
name: "refactor-guide",
description: "Generate step-by-step refactoring instructions",
schema: z.object({
codeSmell: z.string().describe("Type of code smell to address"),
safetyLevel: z
.enum(["aggressive", "moderate", "conservative"])
.describe("Refactoring approach"),
}),
},
async ({ codeSmell, safetyLevel }) => {
const steps = {
aggressive: [
"Identify all instances of the code smell",
"Propose bold refactoring that may require significant changes",
"Show before/after code",
"List breaking changes",
],
moderate: [
"Identify the code smell",
"Propose incremental improvements",
"Show refactoring steps",
"Ensure backward compatibility",
],
conservative: [
"Identify the code smell",
"Propose minimal, safe changes",
"Preserve existing behavior exactly",
"Add tests before refactoring",
],
};
return text(
`Refactor this code to address: ${codeSmell}\n\n` +
`Approach: ${safetyLevel}\n\n` +
`Follow these steps:\n` +
steps[safetyLevel].map((step, i) => `${i + 1}. ${step}`).join("\n"),
);
},
);
Prompt with Context
Include environmental or system context:
server.prompt(
{
name: "optimize-for-runtime",
description: "Generate optimization suggestions for specific runtime",
schema: z.object({
runtime: z
.enum(["node", "browser", "edge", "serverless"])
.describe("Target runtime"),
metric: z
.enum(["latency", "throughput", "memory", "cost"])
.describe("Optimization goal"),
}),
},
async ({ runtime, metric }) => {
const runtimeContext = {
node: "Node.js server environment with access to filesystem and native modules",
browser:
"Browser environment with limited resources and network constraints",
edge: "Edge runtime with fast cold starts but limited execution time",
serverless:
"Serverless function with cold start concerns and pay-per-invocation pricing",
};
return text(
`Optimize this code for ${runtime} runtime to improve ${metric}.\n\n` +
`Context: ${runtimeContext[runtime]}\n\n` +
`Consider:\n` +
`- ${metric === "latency" ? "Reduce response time" : ""}\n` +
`- ${metric === "throughput" ? "Increase requests/second" : ""}\n` +
`- ${metric === "memory" ? "Reduce memory footprint" : ""}\n` +
`- ${metric === "cost" ? "Minimize execution time and resources" : ""}\n\n` +
`Provide specific code changes with explanations.`,
);
},
);
Completion (Autocomplete)
Add autocomplete suggestions to prompt arguments using completable():
import { MCPServer, text, completable } from "mcp-use/server";
import { z } from "zod";
// Static list of suggestions
server.prompt(
{
name: "code-review",
schema: z.object({
language: completable(z.string().describe("Programming language"), [
"python",
"typescript",
"go",
"rust",
]),
code: z.string().describe("Code to review"),
}),
},
async ({ language, code }) => text(`Review this ${language} code...`),
);
Dynamic Completion
Use a callback for suggestions that depend on context or external data:
server.prompt(
{
name: "analyze-project",
schema: z.object({
userId: completable(z.string().describe("User ID"), async (value) => {
const users = await fetchUsers();
return users.map((u) => u.id).filter((id) => id.startsWith(value));
}),
projectId: completable(
z.string().describe("Project ID"),
async (value, ctx) => {
// Use other argument values for contextual suggestions
const userId = ctx?.arguments?.userId;
const projects = await fetchProjects(userId);
return projects.map((p) => p.id).filter((id) => id.startsWith(value));
},
),
}),
},
async ({ userId, projectId }) => text(`Analyzing project ${projectId}...`),
);
Key points:
completable(schema, values)— static list, prefix-matched automaticallycompletable(schema, callback)— dynamic, receives(value, ctx)wherectx.argumentshas other field values- Works with
z.string(),z.number(), andz.enum()schemas - Clients request suggestions via MCP
completion/complete
Best Practices
1. Clear Instructions
✅ "Translate the following text from English to Spanish. Maintain formal tone."
❌ "Translate this."
2. Structured Output
When you want structured responses, specify format:
return text(
`Review this code and respond in the following format:\n\n` +
`## Issues Found\n` +
`- [Issue description]\n\n` +
`## Suggested Fixes\n` +
`- [Fix description with code]\n\n` +
`## Severity\n` +
`[Critical/Major/Minor]`,
);
3. Provide Context
Include relevant context in the prompt:
return text(
`You are reviewing ${language} code for a ${projectType} project.\n` +
`Team follows ${styleGuide} style guide.\n\n` +
`Review the code below...`,
);
4. Be Specific
✅ "Summarize in 3-5 bullet points, each under 20 words"
❌ "Summarize briefly"
Prompts vs Tools
Use a prompt when:
- ✅ Providing instructions to the AI
- ✅ Creating reusable message templates
- ✅ Structuring AI interactions
- ✅ No backend logic needed
Use a tool when:
- ✅ Executing backend actions
- ✅ Calling APIs or databases
- ✅ Returning computed data
- ✅ Has side effects
Example:
// ✅ Prompt - Just instructions
server.prompt(
{ name: "review-code", ... },
async ({ language }) => text(`Review this ${language} code...`)
);
// ✅ Tool - Executes action
server.tool(
{ name: "run-linter", schema: z.object({ file: z.string() }) },
async ({ file }) => {
const results = await runLinter(file);
return object(results);
}
);
Complete Example
import { MCPServer, text, markdown } from "mcp-use/server";
import { z } from "zod";
const server = new MCPServer({
name: "prompt-server",
version: "1.0.0",
});
// Simple text prompt
server.prompt(
{
name: "explain-error",
description: "Generate error explanation prompt",
schema: z.object({
errorMessage: z.string().describe("The error message"),
context: z.string().optional().describe("Additional context"),
}),
},
async ({ errorMessage, context }) => {
let prompt = `Explain this error message in simple terms:\n"${errorMessage}"\n\n`;
if (context) {
prompt += `Context: ${context}\n\n`;
}
prompt += `Provide:\n1. What it means\n2. Common causes\n3. How to fix it`;
return text(prompt);
},
);
// Structured markdown prompt
server.prompt(
{
name: "pr-review",
description: "Generate pull request review checklist",
schema: z.object({
type: z.enum(["feature", "bugfix", "refactor"]).describe("PR type"),
}),
},
async ({ type }) => {
return markdown(`
# Pull Request Review Checklist (${type})
## Code Quality
- [ ] Code follows project style guide
- [ ] No unnecessary code duplication
- [ ] Functions are small and focused
- [ ] Variable names are clear and descriptive
## Testing
- [ ] ${type === "feature" ? "New tests added for new functionality" : ""}
- [ ] ${type === "bugfix" ? "Regression test added" : ""}
- [ ] All tests pass
- [ ] Edge cases covered
## Documentation
- [ ] Code comments where necessary
- [ ] README updated if needed
- [ ] API docs updated
## ${type === "feature" ? "Feature Specific" : type === "bugfix" ? "Bug Fix Specific" : "Refactor Specific"}
${type === "feature" ? "- [ ] Feature flag implemented if needed\n- [ ] Backward compatible" : ""}
${type === "bugfix" ? "- [ ] Root cause identified\n- [ ] Fix verified in production-like environment" : ""}
${type === "refactor" ? "- [ ] No behavior changes\n- [ ] Performance impact assessed" : ""}
`);
},
);
server.listen();
Next Steps
- Format responses → response-helpers.md
- Create tools → tools.md
- See examples → ../patterns/common-patterns.md
Ingestion metadata
- Source catalog
- awesome-llm-apps
- Repository
- Shubhamsaboo/awesome-llm-apps · main
- File path
- generative_ui_agents/ai-mcp-app-builder/apps/mcp-use-server/.agent/skills/mcp-apps-builder/references/server/prompts.md
- Last refreshed
- 10/24/2026, 3:00:14 AM (5h ago)
- Refresh schedule
- Daily · 03:00 UTC
- Dedupe status
- Unique · deduped by (source, url)