aws-knowledge-plus
Enables searching and reading AWS knowledge from sources the official AWS Knowledge MCP Server does not index, including re:Post community Q&A, kiro.dev documentation, and AWS Builder Center posts.
README
aws-knowledge-plus
A Kiro Power for the AWS knowledge sources the official AWS Knowledge MCP Server does not index.
Why this exists
The official server is free, unauthenticated, maintained by AWS, and already covers AWS documentation, AWS blogs, What's New, Well-Architected, and re:Post Knowledge Center articles. Rebuilding any of that would mean scraping undocumented endpoints for content already available through a supported interface.
So this power covers only what the official server rejects. Its read_documentation allow-list is the authoritative boundary:
| Source | Official server | This power |
|---|---|---|
docs.aws.amazon.com (incl. Well-Architected) |
Covered | — |
aws.amazon.com/blogs, What's New |
Covered | — |
repost.aws/knowledge-center |
Covered | — |
repost.aws/questions (community Q&A) |
Not covered | Full search + full thread read |
kiro.dev (docs, blog, changelog) |
Not covered | Full index search + clean markdown read |
builder.aws.com (Builder Center, incl. AWS Builders' Library) |
Not covered | Finds articles across the published archive; no article bodies |
aws.amazon.com/builders-library/ redirects to Builder Center, and the official server refuses the redirect target, so the Builders' Library is unreachable through it. That redirect is the single clearest example of why this power exists.
The boundary above is not a fixed list: it is whatever the official server's own allow-list happens to be, which AWS changes over time. Its read_documentation error message names the current allow-list verbatim, so treat that as the live source of truth and this table as a snapshot. If AWS starts indexing one of these three, the corresponding source here becomes redundant and should be dropped rather than kept for its own sake.
Prerequisites
-
uvonPATH(providesuvx). The power needs no Python of its own;uvfetches an interpreter. -
The official AWS Knowledge MCP Server, for everything in the "Covered" rows above. This power deliberately does not declare it, so that clients which already have it do not open a second connection to the same endpoint and load a duplicate set of tools. If you do not have it yet, add this to
~/.kiro/settings/mcp.json:{ "mcpServers": { "aws-knowledge": { "url": "https://knowledge-mcp.global.api.aws/mcp" } } }
Install
From GitHub (recommended for teams)
- Kiro → Powers panel → Add Custom Power → Import power from GitHub
- Paste this repository's URL
From a local clone
git clone https://github.com/hey-iam-ryan/kiro-power-aws-knowledge-plus- Kiro → Powers panel → Add Custom Power → Import power from a folder
- Select the cloned directory
Without the Powers panel — add the server straight to ~/.kiro/settings/mcp.json:
{
"mcpServers": {
"aws-knowledge-plus": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/hey-iam-ryan/kiro-power-aws-knowledge-plus@v0.2.1",
"aws-knowledge-plus-mcp"
],
"autoApprove": ["search_aws_knowledge", "read_aws_content", "list_sources"]
}
}
}
The first launch resolves the dependency tree and takes a few seconds; later launches are cached by uv.
The server is keyed sources in the power's own mcp.json but aws-knowledge-plus in the snippet above, and that difference is deliberate. Kiro registers a power's servers as power-<powerName>-<serverName>, so keying it aws-knowledge-plus inside a power of the same name would resolve to power-aws-knowledge-plus-aws-knowledge-plus. The prefix already carries the power name. Nothing namespaces a server you add to mcp.json yourself, so there the full name is the useful one.
Using this power in a team
This power is read-only for everyone except the maintainer. On a public GitHub repository, only accounts explicitly added as collaborators can push, and none are. Cloning, installing and forking do not grant any ability to change what your teammates install.
Installs are pinned to a release tag, not to main. mcp.json points at
@v0.2.1, so every teammate runs the same reviewed code even while main moves
on. Nobody is silently upgraded.
Need a change? Open an issue or a pull request. The maintainer reviews it, merges it, and cuts a new tag; teammates pick it up when the pin is updated.
Shipping a new version, for the maintainer. The pin has to be bumped before tagging, otherwise the tag ships the previous version's pin and teammates installing it get the older code:
uv run python smoke_test.py # must pass: it hits the live sources
# 1. bump the version and the pin together
# - pyproject.toml version = "0.3.0"
# - plugin.json "version": "0.3.0"
# - mcp.json ...@v0.3.0
# - README.md every @v0.2.1 occurrence
git commit -am "Release v0.3.0"
git push origin main
# 2. only now tag the commit that carries the correct pin
git tag -a v0.3.0 -m "v0.3.0"
git push origin v0.3.0
Release tags are protected against deletion and force-moves, so a published tag cannot be repointed. A mistake in a release is corrected by shipping the next version, not by rewriting the last one.
Tools
| Tool | Purpose |
|---|---|
search_aws_knowledge(query, sources?, limit?) |
Search all sources in parallel. sources accepts repost, kiro, builder. A slow or broken source degrades to an errors entry instead of failing the call. |
read_aws_content(url, start_index?, max_length?) |
Read a page as markdown, dispatched by host, with explicit truncation markers for resuming. |
list_sources() |
What is covered, what is not, and why. |
Search snippets are intentionally short: they exist to help pick what to read, not to answer from.
What the reads look like
- re:Post — rebuilt from the thread's schema.org
QAPagedata, so you get the question plus every answer with authors, dates, vote counts, and the accepted-answer marker. No HTML scraping, and code blocks survive intact. - kiro.dev docs — fetched from the published markdown twin (
/docs/steeringreads/docs/steering.md), so there is no site chrome to strip. - Builder Center — title, plus a summary when the site's feed published one, and an explicit note that the body was not retrieved. Discovery walks the site's sitemaps, whose location is read from
robots.txtrather than assumed, so the whole published archive is searchable rather than just what a feed happens to expose.
Configuration
| Variable | Default | Purpose |
|---|---|---|
AWS_KNOWLEDGE_PLUS_ENABLE_BUILDER |
1 |
Set 0 to drop Builder Center from federated search. |
AWS_KNOWLEDGE_PLUS_BUILDER_MIN_SCORE |
0.34 |
Relevance floor for Builder Center. Slug matching is noisier than matching real titles, so raise it to cut community noise or lower it to surface more. |
AWS_KNOWLEDGE_PLUS_CACHE_TTL |
900 |
Response cache TTL, seconds. |
AWS_KNOWLEDGE_PLUS_TIMEOUT |
20 |
Per-request timeout, seconds. |
AWS_KNOWLEDGE_PLUS_USER_AGENT |
Chrome-like UA | re:Post challenges non-browser agents. Override with care. |
Known limitations
- Builder Center gives you the article, not its text. Bodies render client-side; the page's only
ld+jsonblock is a genericWebSiterecord,<head>carries site-wide boilerplate, and unauthenticated paths on the site's backend answer 403. Search finds the right article and hands over the URL. Titles come from the site's feed for recent posts and are otherwise derived from the URL slug, which the result discloses inmeta.title_source. Topic hubs under/learn/contain no readable text at all. - re:Post search depth. The site honours
pageSizebut notpage, so results come from a single larger page rather than deep pagination. - Undocumented endpoints. re:Post's search response is read from the
__NEXT_DATA__payload its own page embeds. That is not a published API and can change. The adapter tolerates both payload shapes it currently emits and returns an empty result rather than crashing if neither is found, but a redesign of the site would need a fix here.
Development
uv sync
uv run python smoke_test.py # live checks against all three sources
uv run aws-knowledge-plus-mcp # start on stdio
smoke_test.py hits the real sites, so it doubles as a canary: if a source changes its markup or payload, it fails there first.
Security
Outbound requests are restricted to an allow-list built from each adapter's declared host and path prefixes. Redirects are followed one hop at a time and every hop is re-validated, so a redirect cannot walk the fetcher onto an unlisted host. Only https is accepted. Requests carry no credentials, and every source is public.
License
Apache-2.0
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。