Sessy — Amazon SES observability
Server Details
Read-only Amazon SES observability: search events, inspect bounces, pull delivery stats.
- Status
- Healthy
- Uptime
- 99.8% over 44 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- marckohlbrugge/sessy
- GitHub Stars
- 907
TDQS
Scored across 7 tools
Each tool maps to a distinct action (create, list, get setup, update, stats, search, fetch message). The only mild overlap is that create_source and get_source_setup both surface AWS SES wiring details, and get_message/search_events both relate to event data, but the descriptions clearly delineate their roles.
Six of seven tools follow a clean verb_noun snake_case pattern (create_source, get_message, get_source_setup, list_sources, search_events, update_source). Only email_stats deviates as a noun-only name, a minor inconsistency.
Seven tools is well-scoped for an observability server, with each tool earning its place across source management, stats, and event inspection. No redundant or filler tools.
Covers the core lifecycle: create/read/update sources, setup verification, aggregate stats, event search, and single-message retrieval. Deletion and retention are deliberately deferred to the web UI, a minor gap but a stated design choice.
Available Tools
7 toolscreate_sourceCreate sourceAInspect
Create a new email source (one per app or mail stream) and return the AWS SES wiring details for it: webhook URL for the SNS subscription, suggested configuration set and topic names, and the remaining setup steps. Retention is configured in the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name, e.g. the app or mail stream it tracks | |
| color | No | Badge color in the web UI; defaults to the least-used color |
Output Schema
| Name | Required | Description |
|---|---|---|
| setup | Yes | |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not read-only, not idempotent, and not destructive, so the mutation nature is clear. The description adds useful setup context by enumerating the return payload (webhook URL, config set, topic names, remaining steps) and notes that retention is configured elsewhere in the web UI, which is a behavioral constraint not visible in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant information. The primary action and return format come first, and the retention note is placed at the end as a clarifying aside.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations, full schema coverage, and an output schema present, the description need not explain return values, yet it helpfully summarizes the wiring details provided. The only gap is that it doesn't clarify prerequisites or when to use this versus updating an existing source, but that is minor for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly (name as display name, color as badge with default). The description adds no syntax or meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (create) and resource (email source), and immediately constrains the scoping ('one per app or mail stream'). It also describes what the tool returns, which distinguishes it from the sibling get_source_setup, which presumably only retrieves wiring for a pre-existing source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying it returns AWS SES wiring details, but it never explicitly says when to use create_source versus alternatives like update_source or get_source_setup. An agent must infer that this is for initial setup only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_statsEmail statsARead-onlyIdempotentInspect
Aggregate email stats for one source or the whole account over a date range: counts by event type, unique opens/clicks, bounce/complaint/open/click rates, bounce breakdown by subtype, and an optional daily time series. Rates are percentages of sends.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | No | ISO 8601 date or timestamp; only with date_range custom | |
| from_date | No | ISO 8601 date or timestamp; only with date_range custom | |
| source_id | No | Limit to one source (id from list_sources); omit for the whole account | |
| date_range | No | Date window preset (default last_30_days); use custom with from_date/to_date | |
| include_daily_series | No | Include a per-day sent/delivered/bounced series (ranges up to 120 days); default false |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | Present when there were no sends in the applied window |
| scope | Yes | |
| counts | Yes | |
| daily_series | No | |
| rates_percent | Yes | |
| bounce_breakdown | Yes | Counts keyed by bounce subtype (Permanent, Transient, Undetermined, Unknown) |
| applied_date_range | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is established. The description adds valuable behavioral context beyond annotations: rates are defined as percentages of sends, the optional daily series is noted, and the metric list clarifies exactly what the tool returns. No contradiction exists, and this extra detail helps interpret the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that fronts the main purpose and then lists supporting details. Every clause adds value—scope, date range, metric types, and the send-percentage clarification. It avoids fluff and is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 0 required parameters, an output schema, and rich annotations, the description covers all essential usage aspects: aggregation behavior, source scoping, date range, metric types, and the optional time series. Edge cases like custom date range constraints are handled by the schema, so the description is complete for the intended complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for all 5 parameters is 100%, so the schema carries full semantic weight for parameter details. The description adds minimal parameter-specific meaning (e.g., 'one source or whole account' maps to source_id, 'date range' relates to date_range), but these are restatements of what the schema already documents. Thus the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Aggregate' and the resource 'email stats', then clarifies scope ('one source or the whole account') and date range. It enumerates the exact metrics (counts, opens/clicks, rates, breakdowns, optional series), making it immediately distinct from sibling tools like search_events or get_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when the user needs aggregate metrics (counts/rates) across a date range. It gives context about source scope and date presets, but it does not explicitly mention alternatives or exclusions (e.g., 'for individual events use search_events'). This meets 'clear context, no exclusions' rather than the explicit always/never guidance required for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageGet messageARead-onlyIdempotentInspect
Fetch one email by its ses_message_id (from search_events results): subject, sender, destinations, SES tags, and the per-recipient event timeline including bounce/complaint diagnostics (first 500 events; events_truncated flags the rest — use search_events to page through them).
| Name | Required | Description | Default |
|---|---|---|---|
| ses_message_id | Yes | SES message id from search_events results |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| message | Yes | |
| events_truncated | No | True when more than 500 events exist for this message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the exact fields returned (subject, sender, destinations, SES tags, event timeline), the 500-event limit, the events_truncated flag, and the recommended paging mechanism. There is no contradiction with the readOnly/idempotent/non-destructive annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the core action ('Fetch one email') and packs in field lists, limits, and follow-up guidance. It is efficient but somewhat heavy with parentheticals, which slightly reduces readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Together with the annotations (read-only, idempotent) and the presence of an output schema, the description covers the tool's purpose, input provenance, return contents, limits, truncation behavior, and continuation strategy. Nothing important is left unexplained for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter description already states 'SES message id from search_events results'. The tool description repeats this same context without adding new syntactic, format, or behavioral details about the parameter, so it adds no incremental value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('one email by its ses_message_id'), clearly distinguishing it from sibling tools like search_events (which lists events) and email_stats. It immediately states the exact input needed and the scope of the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the id comes 'from search_events results' and instructs using search_events to page through additional events, giving clear practical usage context. However, it does not explicitly contrast with email_stats or list_sources, so a small gap remains in alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_source_setupGet source setupARead-onlyIdempotentInspect
Fetch one source's settings and the AWS SES wiring details for it: webhook URL for the SNS subscription, suggested configuration set and topic names, and the remaining setup steps. Use this to finish or verify SES setup for an existing source.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | Source id from list_sources |
Output Schema
| Name | Required | Description |
|---|---|---|
| setup | Yes | |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile needs no restating. The description adds that it surfaces setup-specific artifacts (webhook URL, suggested names, remaining steps), which is useful, but since an output schema exists this is largely return-value content and no auth or rate-limit context is added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the content enumeration front-loaded and the use case trailing. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter tool with an output schema and full annotation coverage, the description is essentially complete. The enumerated return details are slightly redundant against the output schema, but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and schema coverage is 100% with the schema note 'Source id from list_sources'. The description contributes no additional parameter meaning (no format, range, or lookup guidance), so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Fetch) and resource (one source's settings), then enumerates the concrete contents: webhook URL, suggested configuration/topic names, and remaining setup steps. It delineates scope to SES setup, which separates it from general source tools, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the triggering context clearly: 'Use this to finish or verify SES setup for an existing source.' There is no when-not guidance or named alternative (e.g., update_source), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList sourcesARead-onlyIdempotentInspect
List this account's email sources with 30-day health stats (sent count, bounce rate, last event). Start here: the other tools take a source_id from these results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sources | Yes | |
| guidance | No | Present when the account has no sources yet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds valuable context about the 30-day health stats and the tool's role as the entry point, without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, each earning its place: the first defines the output and the second gives actionable workflow guidance. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with an output schema and annotations covering safety, the description fully captures purpose, output contents, and how it fits into the broader workflow. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing to explain. Per the rubric, a 0-parameter tool gets a baseline of 4; the description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists this account's email sources with 30-day health stats (sent count, bounce rate, last event). It also positions itself as the starting point for other tools that take a source_id, effectively distinguishing it from siblings like email_stats, get_message, and search_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit workflow guidance is provided: 'Start here: the other tools take a source_id from these results.' This tells the agent to run this tool first to acquire source IDs for subsequent tool calls, making the usage context and alternatives clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch eventsARead-onlyIdempotentInspect
Search email events (sends, deliveries, bounces, complaints, opens, clicks), newest first. Returns compact rows; use get_message with a row's ses_message_id for the full timeline. The date window defaults to the last 30 days — pass date_range "all_time" to search everything.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page (default 25) | |
| query | No | Substring match against recipient email addresses and message subjects | |
| cursor | No | next_cursor value from the previous page | |
| to_date | No | ISO 8601 date or timestamp; only with date_range custom | |
| from_date | No | ISO 8601 date or timestamp; only with date_range custom | |
| source_id | No | Limit to one source (id from list_sources); omit to search all sources | |
| date_range | No | Date window preset (default last_30_days); use custom with from_date/to_date | |
| event_types | No | Only these event types | |
| bounce_types | No | Only these bounce subtypes (combine with event_types ["bounce"]) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | Present when the page is empty and a wider date window may help |
| events | Yes | |
| has_more | Yes | |
| next_cursor | Yes | |
| applied_date_range | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses behavioral details such as 'newest first', 'Returns compact rows', and the default date window. These add meaningful context not available from annotations alone, though no mention of pagination or rate limits is made.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each purposeful and front-loaded. No redundancy; the description is succinct yet packs in scope, ordering, return style, an alternative, and behavioral defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with full schema descriptions and an output schema, the description covers purpose, defaults, and relationships to siblings adequately. It could have mentioned pagination explicitly, but the cursor parameter is documented in the schema, so this is not a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter descriptions, but the description enhances understanding of date_range by stating the default (last_30_days) and the all_time option, and clarifies that from_date/to_date are for custom ranges. It also implies the output contains ses_message_id, linking to get_message.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches email events, enumerates the event types, and specifies ordering (newest first). It also distinguishes itself from siblings by pointing to get_message for full timelines and implicitly contrasting with email_stats and list_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use get_message instead: 'use get_message with a row's ses_message_id for the full timeline.' It also clarifies the default date window (last 30 days) and how to override it with date_range 'all_time', giving concrete usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sourceUpdate sourceAIdempotentInspect
Rename a source or change its badge color. Omitted fields are left unchanged. Retention and deletion are deliberately not available here — use the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name | |
| color | No | New badge color | |
| source_id | Yes | Source id from list_sources |
Output Schema
| Name | Required | Description |
|---|---|---|
| setup | Yes | |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, and destructive=false. The description adds meaningful behavior beyond that: omitted fields are left unchanged, so it is a partial update, and retention/deletion are deliberately excluded. It does not discuss permissions or rate limits, but it adds solid context for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no waste. The main action is front-loaded, followed by omission semantics and then scope exclusions. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has full schema coverage, annotations, and an output schema, so the description does not need to explain return values. It covers the mutation semantics and excluded operations well. It could mention permission requirements, but for this tool the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents name, color, and source_id. The description restates that name and color can be changed and clarifies omitted fields are preserved, but it adds no syntax or format details beyond the schema. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: rename a source or change its badge color. It also explicitly scopes out retention and deletion, which helps an agent avoid misfires. However, it does not name or differentiate itself from MCP siblings such as create_source or list_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-not condition: retention and deletion are not available here and must be done in the web UI. It also implies when to use it, for renaming or recoloring. It stops short of naming sibling tools as alternatives, but the exclusion guidance is explicit and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Added
create_source - Added
get_source_setup - Added
update_source
4 tool updates
- First observed
email_stats - First observed
get_message - First observed
list_sources - First observed
search_events
Related MCP Connectors
Email deliverability monitoring and sending: bounces, complaints, suppression, campaigns.
- LimoneneOAuthapp.limonene
Read-only Amazon seller analytics: sales, Buy Box, FBA inventory, alerts, revenue and fees.
Send, track, and manage transactional and bulk email delivery
Send transactional email, run campaigns, manage contacts and automations, audit deliverability.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceLets you inspect the health of your AWS Lambda functions and S3 buckets using plain English, with read-only access.-
- FlicenseAqualityBmaintenanceProvides read-only search and retrieval of archived emails, archive statistics, health, and ingestion sources, with an optional administrative toolset for user, role, reindexing, and queue management.6-
- AlicenseNot gradedqualityCmaintenanceProvides read-only tools to search customers, orders, and business documents across PostgreSQL, JSON CRM, and Markdown sources, with tenant isolation, PII masking, and auditable access.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables governed, read-only investigations of Amazon Athena access logs by searching exact user, IP, or correlation indicators and summarizing activity by correlation ID, with parameterized queries, validation, and result limits.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.