Skip to content

Repository files navigation

aws-docs-mirror

Local mirror of docs.aws.amazon.com/**.md with a sqlite FTS5 search index, consumed as a Claude Code skill.

AWS publishes a hosted MCP server (aws-mcp.us-east-1.api.aws/mcp) that bundles both docs lookup and live AWS API calls (call_aws). This mirror is for contexts where you want docs access without any API call capability — a classifier that can only read files has zero blast radius.

Setup

bb sync        # fetch all ~130k docs (~45min, uses ETag conditional GETs)
bb index       # build FTS5 search index (~5min)

After that, point a Claude Code skill at this repo (see skill/SKILL.md).

bb search has been removed. Search is now done via sqlite3 directly (see skill/SKILL.md for query recipes). sqlite3 with FTS5 is a runtime dependency of the skill.

Keeping it fresh

bb sync && bb index   # re-run anytime; unchanged docs are skipped (304)

Or via cron:

0 7 * * *  cd /path/to/aws-docs-mirror && bb sync && bb index

A no-change sync on an already-mirrored repo takes ~45s.

Partial sync

bb services                          # list all service prefixes
bb sync --services AmazonS3,AWSEC2   # sync specific services only

AWS uses inconsistent prefixes (AmazonS3, AWSEC2, amazondynamodb, access-analyzer...). bb sync --services validates against the upstream list and suggests corrections.

Layout

mirror/          mirrored .md files, upstream paths 1:1
index/
  search.sqlite  page/chunk FTS5 tables + manifest + cache; everything is in here
src/             Clojure source (com.latacora.aws-docs-mirror.*)
deps.edn         Clojure deps and task aliases
bb.edn           bb task entry points
skill/
  SKILL.md       skill manifest for the consuming agent
  resolver.md    action-name → path conventions

Sizing

~130k files, ~1GB on disk. index/search.sqlite holds a section-level FTS index and is ~1.9GB for the current full mirror. Full text is indexed once, at the section level; the page-level docs table keeps only url/title/service. (Indexing page bodies and sections roughly doubled the file for marginal recall.) Both are gitignored; rebuild from scratch with bb sync && bb index.

Search

Search via sqlite3 directly against index/search.sqlite. Strategy order: exact API URL → title/path LIKE → section FTS → page-level rollup of section hits. See skill/SKILL.md for the full query recipes and FTS5 syntax notes.

Full-text search lives in chunks (section-level), which joins to chunkids on chunks.rowid = chunkids.id for heading/anchor metadata. The docs table is a plain lookup table (url, title, service) — not full-text searchable.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages