MCP Prompts
Prompts are template-based messages that language models can use. Each prompt has a name, description, arguments, and message templates.
Prompt Structure
Every prompt in ModelContextProtocol.jl is represented by the MCPPrompt struct:
name: Unique identifier for the promptdescription: Human-readable explanation of the prompt's purposearguments: List of parameters the prompt acceptsmessages: Template messages with placeholders for arguments
Creating Prompts
Here's how to create a basic prompt:
Note: The role field uses the Role enum with values user and assistant. You may need to import these:
import ModelContextProtocol: user, assistantgreeting_prompt = MCPPrompt(
name = "greeting",
description = "Personalized greeting message",
arguments = [
PromptArgument(
name = "name",
description = "User's name",
required = true
),
PromptArgument(
name = "time_of_day",
description = "Morning, afternoon, or evening",
required = false
)
],
messages = [
PromptMessage(
role = user,
content = TextContent(
text = "Hello! {?time_of_day?Good {time_of_day}}! My name is {name}."
)
)
]
)Arguments
Prompt arguments are defined using the PromptArgument struct:
name: Parameter identifierdescription: Explanation of the parameterrequired: Whether the argument must be provided (default: false)
Template Syntax
Prompt templates support parameter substitution and conditional blocks:
- Basic substitution:
{parameter_name} - Conditional blocks:
{?parameter_name?content if parameter exists}
Registering Prompts
Prompts can be registered with a server in two ways:
- During server creation:
server = mcp_server(
name = "my-server",
prompts = my_prompt # Single prompt or vector of prompts
)- After server creation:
register!(server, my_prompt)Directory-Based Organization
Prompts can be organized in directory structures and auto-registered:
my_server/
└── prompts/
├── greeting.jl
└── faq.jlEach file should export one or more MCPPrompt instances:
# greeting.jl
using ModelContextProtocol
greeting_prompt = MCPPrompt(
name = "greeting",
description = "Personalized greeting message",
arguments = [
PromptArgument(name = "name", description = "User's name", required = true)
],
messages = [
PromptMessage(
role = user,
content = TextContent(text = "Hello! My name is {name}.")
)
]
)Then auto-register from the directory:
server = mcp_server(
name = "my-server",
auto_register_dir = "my_server"
)Advanced Examples
Multi-Message Conversation Prompt
conversation_prompt = MCPPrompt(
name = "code_review",
description = "Code review conversation template",
arguments = [
PromptArgument(
name = "language",
description = "Programming language",
required = true
),
PromptArgument(
name = "code",
description = "Code to review",
required = true
),
PromptArgument(
name = "focus_area",
description = "Specific area to focus on",
required = false
)
],
messages = [
PromptMessage(
role = user,
content = TextContent(
text = "Please review this {language} code:{?focus_area? Focus on {focus_area}.}"
)
),
PromptMessage(
role = user,
content = TextContent(text = "```{language}\n{code}\n```")
),
PromptMessage(
role = assistant,
content = TextContent(
text = "I'll analyze this {language} code{?focus_area? with focus on {focus_area}}."
)
)
]
)Prompt with Image Content
visual_prompt = MCPPrompt(
name = "analyze_diagram",
description = "Analyze a diagram or chart",
arguments = [
PromptArgument(name = "image_path", description = "Path to image", required = true),
PromptArgument(name = "question", description = "Question about the image", required = false)
],
messages = [
PromptMessage(
role = user,
content = TextContent(
text = "Please analyze this diagram{?question?: {question}}"
)
),
# Note: In practice, you'd load the actual image data
PromptMessage(
role = user,
content = ImageContent(
data = UInt8[], # Placeholder for image bytes
mime_type = "image/png"
)
)
]
)