Skip to main content
Glama
README.md
# reinvent2026-mcp

An **MCP (Model Context Protocol) server for the AWS re:Invent 2026 session
catalog**. Attach it to any MCP client — **Claude Desktop, Kiro, Cursor, or
Codex** — (or a Strands agent) to search the full ~1,500-session catalog by
keyword *and* by meaning, look up venues and campus travel, and get the official
AWS links.

Author: **DD** · License: **MIT** ·
Repo: <https://github.com/dineshrajdhanapathyDD/reinvent2026-mcp>

> Not affiliated with AWS. Re:Route AI recommends; AWS re:Invent confirms.
> Official event info always links back to AWS.

---

## Highlights

- **Bundled real catalog** — ships the full **1,507-session** re:Invent 2026
  catalog (scraped from the official public API), loaded on startup. Works
  offline, no keys.
- **Semantic search** — find sessions by a natural-language goal
  ("build production AI agents hands-on"), not just keywords.
- **Venues & travel** — the six venues + walk/shuttle estimates.
- **Official links** — the source-of-truth AWS URLs.
- **Live refresh** — re-scrape the official catalog API with Playwright.

---

## Install

```bash
pip install reinvent2026-mcp

# optional: enable live scraping of the official catalog
pip install "reinvent2026-mcp[scrape]"
playwright install chromium
```

Run it directly:

```bash
reinvent2026-mcp            # stdio MCP server
# or
python -m reinvent2026_mcp.server
```

---

## Tools

| Tool | Description |
|------|-------------|
| `catalog_status` | Active source + session count |
| `search_sessions` | Keyword/topic search (+ day/venue) |
| `semantic_search` | Meaning-based search from a natural-language goal |
| `get_session` | One session by id |
| `list_venues` | The six venues |
| `estimate_travel` | Walk vs. shuttle minutes between venues |
| `official_links` | Authoritative AWS re:Invent URLs |
| `refresh_catalog` | Scrape the official public API (Playwright) |
| `load_catalog` | Load a normalized catalog JSON file |

---

## Use it in your MCP client

The server speaks MCP over **stdio**. Add the snippet for your client, then
restart it and ask something like *"Find hands-on sessions to help me build
production AI agents at re:Invent."*

### Claude Desktop

Edit `claude_desktop_config.json`:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "reinvent-2026": {
      "command": "reinvent2026-mcp"
    }
  }
}
```

If `reinvent2026-mcp` isn't on PATH, use the module form:

```json
{
  "mcpServers": {
    "reinvent-2026": {
      "command": "python",
      "args": ["-m", "reinvent2026_mcp.server"]
    }
  }
}
```

Restart Claude Desktop; the tools appear under the 🔌 (MCP) menu.

### Kiro

Add to `.kiro/settings/mcp.json` (workspace) or `~/.kiro/settings/mcp.json`
(global):

```json
{
  "mcpServers": {
    "reinvent-2026": {
      "command": "reinvent2026-mcp",
      "disabled": false,
      "autoApprove": [
        "catalog_status", "search_sessions", "semantic_search",
        "get_session", "list_venues", "estimate_travel", "official_links"
      ]
    }
  }
}
```

Reconnect from Kiro's **MCP Server** panel (no restart needed).

### Cursor

Edit `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project):

```json
{
  "mcpServers": {
    "reinvent-2026": {
      "command": "reinvent2026-mcp"
    }
  }
}
```

Enable it in **Settings → MCP**, then use it from Cursor chat/agent.

### Codex (OpenAI Codex CLI)

Add to `~/.codex/config.toml`:

```toml
[mcp_servers.reinvent-2026]
command = "reinvent2026-mcp"
args = []
```

(Equivalent module form: `command = "python"`, `args = ["-m", "reinvent2026_mcp.server"]`.)

### Any Strands agent (Python)

```python
from mcp import StdioServerParameters
from strands import Agent
from strands.tools.mcp import MCPClient

client = MCPClient(lambda: StdioServerParameters(command="reinvent2026-mcp"))
client.start()
agent = Agent(tools=client.list_tools_sync())
agent("Find hands-on sessions to help me build production AI agents.")
```

---

## Example prompts

- "Search re:Invent for Amazon Bedrock chalk talks."
- "Semantic search: I want to secure my generative AI applications."
- "How long from The Venetian to MGM Grand — walk or shuttle?"
- "Give me the official re:Invent keynotes and security-focus links."

---

## How the scraper works

The catalog page loads its data from a **public JSON API**
(`POST https://catalog.awsevents.com/api/sessions`) that needs two profile
headers the page generates — **no login required**. `refresh_catalog` opens the
page once with Playwright, captures those headers, then pages through all
sessions and normalizes them.

The public catalog omits per-session times/rooms until nearer the event, so
day/time/venue are assigned deterministically (clearly estimated) to keep
scheduling usable; real published times can replace them without code changes.

Refresh the bundled data:

```bash
reinvent2026-refresh
```

> Automated access is governed by the event's terms of use. Keep it to your own
> personal planning.

---

## Data model

Each session: `id, title, topic, format, venue, room, day, start, end, level,
learning_mode, hands_on, abstract, official_url, catalog_url, match_score`.
Formats normalize to the canonical set (Breakout, Chalk Talk, Workshop, Builders'
Session, Code Talk, Lab, Lightning Talk, Gamified Learning, Exam Prep, Bootcamp,
Keynote), each mapped to a learning mode (Watch and Learn / Work Alongside
Experts / Build It Yourself / Certification).

---

## Development

```bash
git clone https://github.com/dineshrajdhanapathyDD/reinvent2026-mcp.git
cd reinvent2026-mcp
pip install -e ".[dev,scrape]"
pytest -q
```

## Releasing (maintainers)

CI runs the test suite on every push/PR (`.github/workflows/ci.yml`). To publish
a new version to PyPI, bump `version` in `pyproject.toml`, then tag:

```bash
git tag v0.1.0
git push origin v0.1.0
```

The `publish.yml` workflow builds and uploads to PyPI. It uses **PyPI Trusted
Publishing** (OIDC — no stored token); configure the publisher once on PyPI under
the project's *Publishing* settings (owner `dineshrajdhanapathyDD`, repo
`reinvent2026-mcp`, workflow `publish.yml`). Or set a `PYPI_API_TOKEN` repo secret
and uncomment the `password:` line in the workflow.

## What NOT to commit (kept out via .gitignore)

To keep the repo clean and safe, these are intentionally **hidden / ignored** and
should never be committed:

- Build artifacts: `build/`, `dist/`, `*.egg-info/`
- Python caches: `__pycache__/`, `*.pyc`, `.pytest_cache/`
- Virtual environments: `.venv/`, `venv/`
- Editor/OS files: `.DS_Store`, `.idea/`, `.vscode/`
- Secrets & local config: any `.env`, API tokens, PyPI/`.pypirc`, credentials
- Large raw scrape dumps and temporary/probe scripts (`_*.py`, `*_raw.json`)

If you fork or publish, double-check you are not committing credentials or a
`.pypirc`. Publish to PyPI with an API token, not a password.

## License

MIT © 2026 DD

Maintenance

ActivityMaintained
ResponsivenessNo issues