MCP Server

Wraps

dev.wraps/docs

What this MCP does

Searches and reads Wraps product documentation and estimates the monthly cost of running email infrastructure using Wraps and AWS services.

estimate_cost
Estimate Wraps + AWS cost
Estimate the real monthly cost of running email on Wraps + AWS: the flat Wraps platform fee for the plan, and the itemized AWS bill (SES, EventBridge, SQS, Lambda, DynamoDB, dedicated IP, WAF). The Wraps fee never varies with volume; the AWS-side event-pipeline line items (EventBridge, SQS, Lambda, DynamoDB) are derived from emails sent and event types per email. The events parameter is accepted for backward compatibility and does not currently affect the estimate. Use this instead of doing the arithmetic — six variables interact, including which SES pricing plan the AWS account is on.
Read only
Input schema
{'type': 'object', 'required': ['emails'], 'properties': {'tier': {'enum': ['free', 'pro', 'business'], 'type': 'string', 'description': 'Wraps plan.'}, 'emails': {'type': 'integer', 'maximum': 1000000000, 'minimum': 0, 'description': 'Emails sent per month.'}, 'events': {'type': 'integer', 'maximum': 1000000000, 'minimum': 0, 'description': 'Custom events you emit via POST /v1/events per month. Emails sent and SES delivery events (deliveries, opens, clicks, bounces) are not counted and do not affect price.'}, 'billing': {'enum': ['monthly', 'annual'], 'type': 'string', 'description': 'Wraps billing interval.'}, 'sesPlan': {'enum': ['alacarte', 'essentials', 'pro', 'enterprise'], 'type': 'string', 'description': "AWS SES pricing plan for that account and Region. New AWS accounts default to 'essentials' ($0.16/1K); 'alacarte' is $0.10/1K."}, 'retention': {'enum': ['7days', '30days', '90days', '1year', 'indefinite'], 'type': 'string', 'description': 'How long email event history is kept.'}, 'dedicatedIp': {'type': 'boolean', 'description': 'Include a dedicated sending IP.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['currency', 'period', 'total'], 'properties': {'aws': {'type': 'object', 'properties': {'total': {'type': 'number'}, 'sesPlan': {'type': 'string', 'description': 'SES pricing plan the estimate assumes.'}}, 'description': 'AWS-side cost, itemized.'}, 'input': {'type': 'object', 'description': 'The estimate inputs, after defaults were applied.'}, 'total': {'type': 'number', 'description': 'Wraps fee plus the AWS bill.'}, 'wraps': {'type': 'object', 'description': 'Flat Wraps platform fee for the plan. Does not vary with volume.'}, 'period': {'type': 'string', 'description': 'Always month.'}, 'currency': {'type': 'string', 'description': 'Always USD.'}, 'shareUrl': {'type': 'string', 'description': 'Link reproducing this estimate on wraps.dev.'}}}
get_doc
Read a Wraps doc page
Return the full markdown source of one Wraps page. Call list_docs first to see which paths have markdown.
Read only
Input schema
{'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Site path such as /docs/quickstart/email, or the full https://wraps.dev/... URL.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['path', 'url', 'markdown'], 'properties': {'url': {'type': 'string', 'description': 'Canonical URL of the page.'}, 'path': {'type': 'string', 'description': 'Site path that was read.'}, 'markdown': {'type': 'string', 'description': 'Full markdown source.'}}}
list_docs
List Wraps documentation
Return the Wraps llms.txt index: every documentation page, product page, guide, and SDK reference with a one-line description.
Read only
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['source'], 'properties': {'source': {'type': 'string', 'description': 'URL the index was read from.'}}}
search_docs
Search Wraps docs
Search the full Wraps documentation (CLI, TypeScript SDKs, infrastructure, guides) and return the matching sections as markdown. Use this first for any 'how do I ... with Wraps' question.
Read only
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Maximum sections to return (default 5).'}, 'query': {'type': 'string', 'description': "Words to search for, e.g. 'verify domain', 'send batch', 'bounce handling'."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'required': ['query', 'matches'], 'properties': {'query': {'type': 'string', 'description': 'The query as searched.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['heading', 'excerpt'], 'properties': {'excerpt': {'type': 'string', 'description': 'Truncated section body.'}, 'heading': {'type': 'string'}}}, 'description': 'Empty when nothing matched; that is a result, not an error.'}}}
Added
estimate_cost
Sept. 17, 2026, 12:39 p.m.
Added
list_docs
Sept. 17, 2026, 12:39 p.m.
Added
get_doc
Sept. 17, 2026, 12:39 p.m.
Added
search_docs
Sept. 17, 2026, 12:39 p.m.