Skip to main content

AWS Events MCP Server

License Python Docker Hub

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
  • Keyword search restricted to upcoming events only (start date on or after today, UTC)
  • 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

You can either pull the published image from Docker Hub or build it locally.

Option 1: Pull from Docker Hub (recommended)

docker pull okclip/aws-events-mcp:latest

Option 2: Build the image from the project root

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

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

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

MCP client configuration snippet:

{
  "mcpServers": {
    "aws-events": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "okclip/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, search_events, and search_upcoming_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. search_upcoming_events

Keyword substring search (the search counterpart of list_upcoming_events) constrained to events whose start date is on or after the current date in UTC. Otherwise identical to search_events.

Parameters:

  • keyword (string, required, 1–256 chars): Case-insensitive substring searched in each event's title or description (same as search_events).
  • Plus all of the shared filter and pagination arguments above (any supplied start_date is additionally bounded by today's UTC date — the effective lower bound is the later of today (UTC) and start_date).

Example:

await search_upcoming_events(
    keyword="generative ai",
    location_text="Seattle",
    page_size=10,
)

5. 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.

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.3.0.tar.gz (226.2 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.3.0-py3-none-any.whl (60.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: aws_events_mcp-0.3.0.tar.gz
  • Upload date:
  • Size: 226.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aws_events_mcp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4f363371a0af5854745f7903e7f649a950c0313ad9b626afaff6e6c966759afc
MD5 7d5d36687ac1d9926167bd8de5c8b439
BLAKE2b-256 aaaf2c31df883b26e6d1b51d53853769e1b6b7c51ac3e6cd22cd316fdab0025e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: aws_events_mcp-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 60.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for aws_events_mcp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2f4c2d2b3622bc4acb014110fd08973dd17b3bec7dcda9ea5977073cc5736b15
MD5 2d9571c0a2d97710804896e297f2c2ca
BLAKE2b-256 54f281e8f2480a285b3d65f9a3c406895bfbeb0b9380ea0488df29120f434efa

See more details on using hashes here.

Release history Release notifications | RSS feed

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

This release

0.3.0 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page