Skip to main content

AWS Events MCP Server - discover, search, and filter the public AWS Events catalog over the Model Context Protocol

Project description

AWS Events MCP Server

License Python

A Model Context Protocol (MCP) server that exposes the public AWS Events catalog as a set of programmatic tools for discovering, searching, and filtering AWS events — Tech Talks, webinars, summits, roadshows, networking events, and partner events.

Overview

The server lets an MCP client (an AI agent or application) discover, search, filter, and inspect AWS events without scraping the catalog page itself. It fetches the public catalog, parses each record into a validated event model, caches the result in memory, and serves all filtering, searching, and pagination as fast, deterministic operations.

Key characteristics:

  • No AWS credentials required. The server contacts only the public AWS Events catalog endpoint. It does not call AWS service APIs, so no AWS_REGION, AWS_PROFILE, or credentials of any kind are needed. This is a deliberate deviation from the sibling aws-dms-troubleshoot-mcp-server, which does require AWS_REGION/AWS_PROFILE.
  • Structured results. Listings return ordered, paginated event collections with an accurate total count; failures return structured error responses rather than crashing.
  • Deterministic filtering. Identical queries against an unchanged catalog return equivalent results.

Features

  • List AWS events ordered by start date, with optional filters
  • Keyword search over event title and description
  • Filter by learning level, location (virtual/physical or free-text), date range, event type, and partner
  • Convenience listing of upcoming events only (start date on or after today, UTC)
  • Retrieve full details for a single event, including registration and learn-more links
  • Bounded, paginated responses with opaque page tokens

Installation

Using uvx (recommended)

The simplest way to run the server is with uvx, which downloads and runs the published package without a manual install:

uvx aws-events-mcp@latest

Alternatively, install it into your environment with uv or pip:

uv pip install aws-events-mcp
# or
pip install aws-events-mcp

All of these expose the aws-events-mcp console command.

From Source

cd aws-events-mcp
uv sync
uv run aws-events-mcp

Configuration

Environment Variables

This server needs no AWS credentials and no AWS configuration. The only supported environment variable is the log level:

# Optional: logging level (DEBUG, INFO, WARNING, ERROR). Default: INFO
export FASTMCP_LOG_LEVEL=INFO

No AWS credentials or profile needed. Unlike the sibling aws-dms-troubleshoot-mcp-server (which requires AWS_REGION and optionally AWS_PROFILE), this server only retrieves the public AWS Events catalog over HTTPS. Do not set AWS_REGION, AWS_PROFILE, or AWS access keys — they are ignored.

Running the Server

The server can run two ways: directly via uvx (recommended), or inside a Docker container. Both modes are configured below for a typical MCP client (e.g., Kiro, Claude Desktop).

uvx mode

Run the published package directly:

uvx aws-events-mcp@latest

MCP client configuration snippet:

{
  "mcpServers": {
    "aws-events": {
      "command": "uvx",
      "args": ["aws-events-mcp@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "INFO"
      }
    }
  }
}

No AWS credentials or profile are required for this server — only the public AWS Events catalog is contacted. The env block intentionally omits AWS_REGION and AWS_PROFILE.

Docker mode

Build the image from the project root:

docker build -t aws-events-mcp:latest .

Run the container (MCP uses stdio, so run interactively and remove on exit):

docker run -i --rm aws-events-mcp:latest

MCP client configuration snippet:

{
  "mcpServers": {
    "aws-events": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "aws-events-mcp:latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "INFO"
      }
    }
  }
}

No AWS credentials or profile are required for this server — only the public AWS Events catalog is contacted. There is no need to mount ~/.aws or pass AWS environment variables into the container.

Available Tools

All tools are asynchronous and return structured JSON responses. Listing and search tools share the same optional filter arguments and the same pagination behavior.

Shared filter and pagination arguments

These arguments are accepted by list_events, list_upcoming_events, and search_events:

  • learning_level (string or list, optional): One to four learning levels. Accepted values (case-insensitive): Foundational, Intermediate, Advanced, Expert. Matches events whose level equals any supplied value.
  • location_mode (string, optional): virtual (online events) or physical (in-person venue events).
  • location_text (string, optional, 1–200 chars): Case-insensitive substring match against the event's location/venue field.
  • event_type (string, optional, 1–256 chars): Case-insensitive exact match on the event category (e.g., Tech Talk, webinar, summit).
  • partner (string, optional, 1–256 chars): Case-insensitive substring match on the partner name.
  • start_date (string, optional, YYYY-MM-DD): Return only events whose start date is on or after this date.
  • end_date (string, optional, YYYY-MM-DD): Return only events whose start date is on or before this date. Must not be earlier than start_date.
  • page_size (integer, optional, 1–100): Maximum number of events in the response. Default 20.
  • page_token (string, optional): Opaque token from a previous response used to fetch the next page. Must match the query that produced it.

Multiple filters combine with AND. Results are always ordered by start date ascending.

1. list_events

List AWS events ordered by start date ascending, with all filters optional.

Parameters: all of the shared filter and pagination arguments above.

Example:

await list_events(
    learning_level="Advanced",
    location_mode="virtual",
    page_size=20,
)

2. search_events

Keyword substring search over event title and description, combinable with all the shared filters.

Parameters:

  • keyword (string, required, 1–256 chars): Case-insensitive substring searched in each event's title or description.
  • Plus all of the shared filter and pagination arguments above.

Example:

await search_events(
    keyword="generative ai",
    learning_level=["Intermediate", "Advanced"],
    page_size=25,
)

3. list_upcoming_events

Convenience listing constrained to events whose start date is on or after the current date in UTC. Otherwise identical to list_events.

Parameters: all of the shared filter and pagination arguments above (any supplied start_date is additionally bounded by today's UTC date).

Example:

await list_upcoming_events(
    location_text="Seattle",
    page_size=10,
)

4. get_event_details

Return the single event whose identifier exactly matches the supplied value. The response always includes all twelve presentation fields (title, description, start date, start time, time zone, location, location mode, learning level, event type, partner name, registration URL, learn-more URL); absent values are returned as explicit null rather than omitted. If no event matches, a not-found result is returned.

Parameters:

  • event_id (string, required): Non-empty unique identifier of the event to retrieve.

Example:

await get_event_details(
    event_id="evt-12345",
)

Response Shapes

Listing/search success:

{
  "status": "success",
  "items": [ { "...event JSON..." } ],
  "total_count": 137,
  "page_size": 20,
  "next_page_token": "eyJvZmZzZXQiOjIwLC..."
}

next_page_token is present only when more matching events remain.

Validation error:

{
  "status": "error",
  "error_type": "validation_error",
  "field": "page_size",
  "message": "page_size must be an integer between 1 and 100 inclusive.",
  "items": [],
  "total_count": 0
}

Source error:

{
  "status": "error",
  "error_type": "source_unreachable",
  "message": "The AWS Events catalog could not be retrieved: connection failed.",
  "items": [],
  "total_count": 0
}

Not found (get_event_details):

{ "status": "not_found", "message": "No event matched identifier 'abc123'.", "event": null }

Development

cd aws-events-mcp
uv sync

# Run the test suite
uv run pytest

# Lint and type-check
uv run ruff check .
uv run pyright

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

This project is licensed under the Apache License 2.0 — see the LICENSE file for details.

Resources

Changelog

See CHANGELOG.md for version history and release notes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aws_events_mcp-0.1.0.tar.gz (207.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aws_events_mcp-0.1.0-py3-none-any.whl (52.3 kB view details)

Uploaded Python 3

File details

Details for the file aws_events_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: aws_events_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 207.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aws_events_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 41bc061a31ae9c6adc4728c2162b143ea138ed79d03bddba8f1914e48a07de2a
MD5 e51f62e9ebec50332e1615f239d49095
BLAKE2b-256 1e069cf3339fd1a13238977a5701ab3215214aa525e4fda7aa6eb4094fd5c608

See more details on using hashes here.

File details

Details for the file aws_events_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: aws_events_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 52.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for aws_events_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7de46aa33d0048583be01e0bb3133a5db8fe0c3d7f6517b00811c8e7aa323d9e
MD5 4f3fd4f5ee87a0c0f99dc2173a71ad7a
BLAKE2b-256 aeb4123fe94eccb79062bf81ae41ec0e08ace2e8b12362245dc266f47bfe6e72

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page