HTML Email Playbook
Teaches AI to write HTML email that renders in Outlook, Gmail, and Apple Mail. 19 rules, 6 comps.
Should I use this
Quality & Safety
Findings (3)
- HIGH
- MEDIUMin get_component
- INFOin get_component
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"email-playbook-mcp": {
"command": "npx",
"args": [
"email-playbook-mcp"
]
}
}
}Runnable packages
0.6.3stdioRemote endpoints
https://docs.osamahassouna.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢list_categories
List all rule categories in the Email Playbook with a one-line description and page count. Categories are: structure (head/body container/header/body/footer), compatibility (Outlook MSO, RTL, responsive), production (Gmail clipping, dark mode, preheader, bulletproof buttons), ai-generation (constraints for AI emitters). For reusable components, use list_components instead — they live in a separate dimension and are not returned by get_playbook_rules.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_playbook_rules(category)
Return the full rule pages for a given category. Each rule includes the title, description, markdown body explaining the rule, and any HTML/CSS code examples from the playbook. Use this to teach a model the exact patterns for a specific concern (e.g., responsive layout).
Input Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"ai-generation",
"compatibility",
"production",
"structure"
],
"description": "Which rule category to fetch."
}
},
"required": [
"category"
],
"additionalProperties": false
}🟢list_components
List all reusable email components in the playbook with their metadata: name, subcategory (layout/media/interactive/text), description, whether they require Outlook VML, and whether they are responsive. Use this first to discover what components exist before calling get_component.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_component(name)
Return the full record for a single component: title, description, narrative body, the primary HTML pattern, list of slots (placeholders the model should fill), VML/responsive flags, and all code examples. Use after list_components to fetch the actual HTML pattern to paste into an email.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"enum": [
"background-images",
"buttons",
"images",
"inline-icon",
"spacing",
"text"
],
"description": "Component name. Get the list from list_components first."
}
},
"required": [
"name"
],
"additionalProperties": false
}Community
Evidence