llm-catalog-archive

Change

74d125e

74d125e298b4e45d07b86fffa5e16d1548e5b092 · commit on GitHub

aws-blog-feed: changed (603992 bytes, HTTP 200)

raw/aws-blog-feed/response.xml modified

Lines added
+977
Lines removed
-542
Stored bytes at this commit
603,992
Timestamp
observed
Raw artifact at this commit
raw/aws-blog-feed/response.xml
Recorded headers
observed_at2026-10-03T05:18:55.944Z
origin_datenull
status200
final URLhttps://aws.amazon.com/blogs/machine-learning/feed/
etagnull
last-modifiedFri, 02 Oct 2026 23:01:47 GMT
dateSat, 03 Oct 2026 05:18:55 GMT
agenull
cache-controlnull
cf-cache-statusnull
content-encodingnull
content-lengthnull
@@@ -5,7 +5,7 @@
<atom:link href="https://aws.amazon.com/blogs/machine-learning/feed/" rel="self" type="application/rss+xml"/>
<link>https://aws.amazon.com/blogs/machine-learning/</link>
<description>Official Machine Learning Blog of Amazon Web Services</description>
- <lastBuildDate>Thu, 01 Oct 2026 22:13:49 +0000</lastBuildDate>
+ <lastBuildDate>Fri, 02 Oct 2026 15:48:26 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly </sy:updatePeriod>
@@@ -13,6 +13,982 @@
1 </sy:updateFrequency>
<item>
+ <title>Sweep thousands of leases for compliance using Amazon Quick and the Adjudicated Query pattern</title>
+ <link>https://aws.amazon.com/blogs/machine-learning/sweep-thousands-of-leases-for-compliance-using-amazon-quick-and-the-adjudicated-query-pattern/</link>
+
+ <dc:creator><![CDATA[Anand Komandooru]]></dc:creator>
+ <pubDate>Fri, 02 Oct 2026 15:48:26 +0000</pubDate>
+ <category><![CDATA[Advanced (300)]]></category>
+ <category><![CDATA[Amazon Quick Suite]]></category>
+ <category><![CDATA[Technical How-to]]></category>
+ <guid isPermaLink="false">2f2cd30ac2942c76cf89e1fbda1bc39b085e37cc</guid>
+
+ <description>The Adjudicated Query pattern pairs the Amazon Quick chat agent with a bounded MCP server over a deterministic rules engine to deliver provably complete, defensible compliance answers. This post walks through the reference architecture and a deployable AWS CDK sample, using lease c…
+ <content:encoded>&lt;p&gt;Checking tens of thousands of apartment leases against constantly changing state landlord-tenant laws, and proving you actually checked all of them, has been beyond the reach of most compliance teams. But with generative AI in &lt;a href="https://aws.amazon.com/qu…
+&lt;h2 id="the-compliance-challenge-at-scale"&gt;The compliance challenge at scale&lt;/h2&gt;
+&lt;p&gt;A portfolio operator holds 50,000 leases across multiple states. Each state publishes landlord-tenant statutes (late-fee caps, notice periods, security-deposit limits) that change on the legislature’s schedule, not the operator’s. When a regulation changes, the team responsible for complian…
+&lt;p&gt;At small volume a paralegal reads the leases. The answer is trustworthy because a human stands behind it. Past some threshold, that stops being possible. The work moves to software, and a new problem appears: the answer is now a number on a screen that nobody can independently verify.&lt;/p…
+&lt;p&gt;Two properties follow from that reality:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;Provable completeness:&lt;/strong&gt; A claim like “we checked all 22,910 Texas leases” must be true and demonstrable. A record never assessed must be reported as unevaluated rather than silently omitted.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Defensibility:&lt;/strong&gt; A finding may be challenged months later in litigation, an audit, or a regulatory examination. Defending it means knowing which version of which rule was applied, to which clause text, by what method, on what date, and by whom.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;These two properties are what distinguish this problem from enterprise search. Retrieval Augmented Generation (RAG) addresses the accessibility gap but cannot satisfy either property. Similarity search has no threshold that means &lt;em&gt;all of them&lt;/em&gt;. A ranked sample never knows…
+&lt;p&gt;Text-to-SQL narrows this gap, but carries a category-level risk: a hallucinated predicate can silently reduce the population, and the resulting number looks exact even when the scope is wrong.&lt;/p&gt;
+&lt;h2 id="how-the-adjudicated-query-pattern-solves-it"&gt;How the Adjudicated Query pattern solves it&lt;/h2&gt;
+&lt;p&gt;The Adjudicated Query pattern is a bounded conversational layer over a deterministic rules engine. The model does exactly two things: translate a natural-language question into a call on a fixed set of typed operations, and narrate the result that comes back. It never writes a query, never …
+&lt;p&gt;Behind the boundary sits a rules engine. Rules are versioned data, not code. The engine knows generic comparison operators (&lt;code&gt;gte&lt;/code&gt;, &lt;code&gt;lte&lt;/code&gt;, &lt;code&gt;equals&lt;/code&gt;, &lt;code&gt;exists&lt;/code&gt;) and contains no branch naming a jurisdict…
+&lt;p&gt;Every compliance sweep produces a completeness receipt: an asserted invariant where compliant + in-breach + ambiguous + unreadable must equal scanned. This is computed from counts and asserted before anything persists. A run that can’t account for its population never finishes. There’s no p…
+&lt;p&gt;The conversational surface carries counts, the receipt, and a labeled sample. The full result set (potentially tens of thousands of rows) lives on a dashboard surface reading the same data store, drillable per record. This separation means the model never summarizes away the guarantee.&lt;/…
+&lt;h3 id="why-not-rag-or-text-to-sql"&gt;Why not RAG or text-to-SQL?&lt;/h3&gt;
+&lt;table border="1px" width="100%" cellpadding="10px"&gt;
+ &lt;tbody&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Approach&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Population&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Completeness&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Defensibility&lt;/strong&gt;&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Semantic retrieval (RAG)&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;A ranked sample&lt;/td&gt;
+ &lt;td&gt;Structurally impossible&lt;/td&gt;
+ &lt;td&gt;Partial&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Generated queries (text-to-SQL)&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;Claimed but unprovable&lt;/td&gt;
+ &lt;td&gt;Silent narrowing risk&lt;/td&gt;
+ &lt;td&gt;If modeled&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Rules engine + BI (no chat)&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;Exact and proven&lt;/td&gt;
+ &lt;td&gt;Yes&lt;/td&gt;
+ &lt;td&gt;Yes&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Adjudicated Query&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;Exact and proven&lt;/td&gt;
+ &lt;td&gt;Yes&lt;/td&gt;
+ &lt;td&gt;Yes&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;p&gt;The Adjudicated Query pattern adds natural-language access to the rules engine plus business intelligence (BI) approach without sacrificing the guarantee. It’s the right choice when accountable users need conversational access, and a missed record is a liability rather than a mild inconveni…
+&lt;h2 id="reference-architecture"&gt;Reference architecture&lt;/h2&gt;
+&lt;p&gt;The following diagram shows how the components fit together end to end. A compliance officer interacts with two surfaces in Amazon Quick: a chat agent for asking questions and an Amazon Quick Sight dashboard for browsing the full result set. The chat agent first fetches an OAuth token from …
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/09/30/ML-21832-1.png" target="_blank" rel="noopener"&gt;&lt;img style="width: 6.04167in;height: 4.5625in" title="Architecture diagram: Amazon Quick chat agent and Amazon Quick Sight dashboard both read f…
+ &lt;p class="wp-caption-text"&gt;Figure 1: Reference architecture for the Adjudicated Query pattern&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;Both surfaces read the same store. The chat agent carries the completeness receipt and a link to the dashboard. The dashboard carries the volume, because 10,800 rows don’t render in a chat message. Amazon Bedrock is called from AWS Lambda only by the exploratory operation. No model is invol…
+&lt;h3 id="the-bounded-operation-surface"&gt;The bounded operation surface&lt;/h3&gt;
+&lt;p&gt;The MCP server exposes exactly six tools, each with a distinct semantic:&lt;/p&gt;
+&lt;table border="1px" width="100%" cellpadding="10px"&gt;
+ &lt;tbody&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;Tool&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;What it does&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;&lt;strong&gt;Result means&lt;/strong&gt;&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;sweep_compliance&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;Exhaustive population sweep against rules in force on a stated date&lt;/td&gt;
+ &lt;td&gt;Official. Every lease accounted for in a computed receipt. Writes findings&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;simulate_rule_change&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;One rule tested at a proposed value against the approved baseline&lt;/td&gt;
+ &lt;td&gt;Exploratory. Directional counts only. Records nothing&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;explore_clauses&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;Top K by semantic similarity within a filtered population&lt;/td&gt;
+ &lt;td&gt;Interpretive. A ranked sample. Cannot answer “how many”&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;get_finding&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;One finding’s complete evidence chain&lt;/td&gt;
+ &lt;td&gt;Drill-down into a single determination&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;list_rules&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;The rulebook in force on a date, with versions, citations, approvers&lt;/td&gt;
+ &lt;td&gt;Reference lookup&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;td&gt;&lt;strong&gt;check_connection&lt;/strong&gt;&lt;/td&gt;
+ &lt;td&gt;Liveness check, touches no data&lt;/td&gt;
+ &lt;td&gt;Transport health&lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/tbody&gt;
+&lt;/table&gt;
+&lt;p&gt;This bounded surface removes the path to the silent-narrowing risk of generated queries. Because the model can only select from a fixed set of operations whose population logic was written, reviewed, and tested by people, it has no way to compose a wrong population.&lt;/p&gt;
+&lt;h3 id="key-architecture-components"&gt;Key architecture components&lt;/h3&gt;
+&lt;p&gt;With the Amazon Quick conversational interface and agent orchestration layer, you can ask natural-language compliance questions that the Amazon Quick chat agent translates into calls on the bounded MCP operation surface. Amazon Quick authenticates to the MCP server by using OAuth 2LO throug…
+&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html" target="_blank" rel="noopener"&gt;Amazon Aurora Serverless v2&lt;/a&gt; (Postgres + pgvector) stores the rulebook, lease records, extraction status, determinations, and runs in a single relat…
+&lt;p&gt;&lt;a href="https://aws.amazon.com/lambda/" target="_blank" rel="noopener"&gt;AWS Lambda&lt;/a&gt; hosts the MCP server (JSON-RPC 2.0 over Streamable HTTP, using Server-Sent Events framing for responses, which the Amazon Quick client requires) and the rule engine. Bounded operations transla…
+&lt;p&gt;&lt;a href="https://aws.amazon.com/api-gateway/" target="_blank" rel="noopener"&gt;Amazon API Gateway&lt;/a&gt; HTTP API provides the front door with a JSON Web Token (JWT) authorizer backed by Amazon Cognito. No unauthenticated route exists.&lt;/p&gt;
+&lt;p&gt;&lt;a href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener"&gt;Amazon Cognito&lt;/a&gt; issues OAuth tokens through a two-legged (client credentials) flow. The client secret is read from Amazon Cognito at registration time and not written to disk.&lt;/p&gt;
+&lt;p&gt;&lt;a href="https://aws.amazon.com/bedrock/" target="_blank" rel="noopener"&gt;Amazon Bedrock&lt;/a&gt; powers the exploratory path only, using Amazon Titan Text Embeddings V2 (&lt;code&gt;amazon.titan-embed-text-v2:0&lt;/code&gt;) for semantic similarity ranking and Anthropic Claude Sonnet…
+&lt;p&gt;&lt;a href="https://aws.amazon.com/quicksight/" target="_blank" rel="noopener"&gt;Amazon Quick Sight&lt;/a&gt; connects to Aurora through a VPC connection and renders the full findings table, filterable by sweep and severity band, with every column needed to defend a determination already o…
+&lt;h3 id="design-rules-that-are-non-negotiable"&gt;Design rules that are non-negotiable&lt;/h3&gt;
+&lt;ul&gt;
+ &lt;li&gt;Rules are data. A law change is a rulebook row. The engine contains no jurisdiction-specific branch.&lt;/li&gt;
+ &lt;li&gt;No natural language reaches SQL. Operators select fixed SQL templates. Rule values bind as parameters.&lt;/li&gt;
+ &lt;li&gt;Deterministic before AI. A numeric comparison answers the sweep. No model is consulted.&lt;/li&gt;
+ &lt;li&gt;Exact filtering for completeness, vectors only for ranking. Similarity never decides membership.&lt;/li&gt;
+ &lt;li&gt;Receipts are computed, not written by hand. The invariant is asserted before a sweep commits.&lt;/li&gt;
+ &lt;li&gt;Unreadable documents are named, not dropped. Every lease lands in exactly one bucket.&lt;/li&gt;
+ &lt;li&gt;Findings are append-only. No UPDATE or DELETE against findings exists in the code base.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h2 id="treating-the-summarizing-model-as-an-untrusted-renderer"&gt;Treating the summarizing model as an untrusted renderer&lt;/h2&gt;
+&lt;p&gt;One design element deserves its own section because it will look unfamiliar: engineering safeguards to survive paraphrase by the chat model.&lt;/p&gt;
+&lt;p&gt;Excluding the model from the decision path but putting one back in the delivery path reintroduces risk at the end of the chain. In practice, we observed:&lt;/p&gt;
+&lt;ol type="1"&gt;
+ &lt;li&gt;&lt;strong&gt;A model stripped a caveat prefix.&lt;/strong&gt; An ILLUSTRATIVE citation tag was removed during paraphrase, and the model presented an invented citation as statute.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;A model extrapolated from a sample.&lt;/strong&gt; Given 20 preview rows, the model inferred a population-wide range that did not exist in the data.&lt;/li&gt;
+&lt;/ol&gt;
+&lt;p&gt;Three techniques address this:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;Phrase caveats as un-strippable bracketed suffixes&lt;/strong&gt; repeated at several payload levels, not leading labels that read as removable metadata.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Supply the data that makes the honest answer the easy one.&lt;/strong&gt; Compute real aggregates over every record and hand them to the model. A model that has the real number doesn’t need to guess from a sample.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Repeat mode labels at multiple structural levels&lt;/strong&gt; (field, string, summary) so that at least one survives paraphrase.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;The principle: a safeguard in the payload is only as strong as its survival through paraphrase.&lt;/p&gt;
+&lt;h2 id="deploy-and-run-the-sample"&gt;Deploy and run the sample&lt;/h2&gt;
+&lt;p&gt;The complete reference implementation is available on GitHub. It ships with synthetic data (no real customer lease data), deterministic corpus generation, and acceptance tests against the deployed stack.&lt;/p&gt;
+&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
+&lt;p&gt;Before deploying, verify that you have:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;An AWS account with Amazon Bedrock model access enabled for Amazon Titan Text Embeddings V2 and Anthropic Claude Sonnet 5 in the US East (N. Virginia) Region (us-east-1).&lt;/li&gt;
+ &lt;li&gt;AWS Command Line Interface (AWS CLI) v2 with credentials configured (&lt;code&gt;aws sts get-caller-identity&lt;/code&gt; should succeed).&lt;/li&gt;
+ &lt;li&gt;Python 3.12.&lt;/li&gt;
+ &lt;li&gt;Node.js 24 for the AWS Cloud Development Kit (AWS CDK) CLI. mise is optional and only used to provision Node 24. You can install Node 24 by your choice of method (Node 18 has reached end of life for CDK).&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h3 id="step-1-clone-the-repository"&gt;Step 1: Clone the repository&lt;/h3&gt;
+&lt;p&gt;Clone the sample repository and set up the Python environment:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;git clone https://github.com/aws-samples/sample-quick-adjudicated-query.git
+cd sample-quick-adjudicated-query
+python3 -m venv .venv &amp;amp;&amp;amp; .venv/bin/pip install -q -r requirements.txt&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;h3 id="step-2-deploy-the-infrastructure"&gt;Step 2: Deploy the infrastructure&lt;/h3&gt;
+&lt;p&gt;Bootstrap CDK (if not already done) and deploy the stack. Aurora provisioning typically takes around 11 minutes, though timing varies by account and Region.&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;eval "$(mise env -s zsh)"
+export CDK_DEFAULT_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
+npx aws-cdk@2.261.0 bootstrap aws://$CDK_DEFAULT_ACCOUNT/us-east-1
+npx aws-cdk@2.261.0 deploy --outputs-file outputs.json&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;The CDK version is pinned to 2.261.0 to match requirements.txt. The stack deploys:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;Amazon Cognito (2LO client).&lt;/li&gt;
+ &lt;li&gt;Amazon API Gateway with JWT authorizer.&lt;/li&gt;
+ &lt;li&gt;AWS Lambda (MCP server + rule engine).&lt;/li&gt;
+ &lt;li&gt;Amazon Aurora Serverless v2.&lt;/li&gt;
+ &lt;li&gt;Amazon Quick Sight networking.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h3 id="step-3-seed-data-and-verify"&gt;Step 3: Seed data and verify&lt;/h3&gt;
+&lt;p&gt;Run the migration, corpus generation, ingestion, and Amazon Quick Sight setup scripts in sequence:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;PY=.venv/bin/python
+$PY db/migrate.py # schema, rulebook, views (7 checks)
+$PY gen_corpus.py # deterministic corpus + manifest
+$PY ingest.py # load + embed (timing varies by environment)
+$PY setup_dashboard.py # Quick Sight wiring
+$PY acceptance.py # 28 checks against the live stack&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;The corpus is deterministic, so a rebuilt stack reproduces identical results.&lt;/p&gt;
+&lt;h3 id="step-4-register-the-mcp-integration-in-amazon-quick"&gt;Step 4: Register the MCP integration in Amazon Quick&lt;/h3&gt;
+&lt;p&gt;Amazon Quick snapshots the tool list at registration time. Amazon Quick doesn’t detect new or renamed tools until you delete and recreate the integration. Deploying the Lambda alone isn’t enough.&lt;/p&gt;
+&lt;p&gt;Print the registration inputs from your deployment outputs:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;python3 - &amp;lt;&amp;lt;'PY'
+import json
+o = json.load(open('outputs.json'))['QuickPocStack']
+for k in ('McpUrl', 'TokenEndpoint', 'ClientId', 'Scope'):
+ print('%-14s %s' % (k, o[k]))
+PY&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;Retrieve the client secret (read from Amazon Cognito each time, not written to disk). Use the user pool ID from the Issuer URL in your outputs:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;aws cognito-idp describe-user-pool-client \
+ --user-pool-id &amp;lt;UserPoolId&amp;gt; \
+ --client-id &amp;lt;ClientId&amp;gt; \
+ --query UserPoolClient.ClientSecret --output text&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;Then in Amazon Quick: Connectors &amp;gt; Create for your team &amp;gt; Model Context Protocol. Delete any existing entry first, then create a new one with those values (OAuth client-credentials/2LO). Copy the client secret into Amazon Quick directly rather than into a file or shell variabl…
+&lt;h3 id="step-5-verify-the-integration"&gt;Step 5: Verify the integration&lt;/h3&gt;
+&lt;p&gt;Verify the deployment end to end, in this order:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;$PY show_payload.py check_connection # transport alive
+$PY acceptance.py # 28/28 checks&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;The acceptance suite proves the server works. The next section walks through the Amazon Quick chat experience to confirm Amazon Quick picks the right tool.&lt;/p&gt;
+&lt;h2 id="walking-through-the-experience"&gt;Walking through the experience&lt;/h2&gt;
+&lt;p&gt;With the stack deployed and verified, you can now run a compliance sweep from Amazon Quick chat and inspect the results.&lt;/p&gt;
+&lt;h3 id="ask-a-compliance-question"&gt;Ask a compliance question&lt;/h3&gt;
+&lt;p&gt;In Amazon Quick chat, enter: “Which Texas leases violate the late fee cap? Use rules effective 01/01/2026.”&lt;/p&gt;
+&lt;p&gt;Amazon Quick identifies this as a compliance sweep and selects the &lt;code&gt;sweep_compliance&lt;/code&gt; tool. The tool runs an exhaustive check against every Texas lease in the population, applying rules in force on the stated date. No model is involved in the determination.&lt;/p&gt;
+&lt;p&gt;Amazon Quick narrates the structured result. Figure 2 shows the chat response: a short sample of noncompliant findings in a table, the completeness receipt rendered as counts, a synthetic-data caveat, and a link to open the full dashboard.&lt;/p&gt;
+&lt;div style="width: 678px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/09/30/ML-21832-2.png" target="_blank" rel="noopener"&gt;&lt;img style="width: 5in;height: 5.98958in" title="Amazon Quick chat response: a table of sample noncompliant lease findings, count totals for the…
+ &lt;p class="wp-caption-text"&gt;Figure 2: Amazon Quick chat response with the completeness receipt and a sample of findings&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;The response includes a sample of noncompliant findings and the completeness receipt as counts: 10,111 violations, 689 ambiguous, and 20 unreadable. It also includes a synthetic-data caveat and a link into the Amazon Quick Sight dashboard. It deliberately does not try to render all 10,111 r…
+&lt;p&gt;Verify the completeness receipt by checking the invariant: compliant + in-breach + ambiguous + unreadable should equal the total scanned population. In this example, the counts sum to the total Texas lease population, confirming that every record landed in exactly one bucket.&lt;/p&gt;
+&lt;h3 id="inspect-the-full-population-on-the-dashboard"&gt;Inspect the full population on the dashboard&lt;/h3&gt;
+&lt;p&gt;Follow the dashboard link in the chat response to open the Amazon Quick Sight dashboard. Figure 3 shows the findings tab, where every lease-rule pair from the sweep appears as its own row with the full evidence chain.&lt;/p&gt;
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/09/30/ML-21832-3.png" target="_blank" rel="noopener"&gt;&lt;img style="width: 6.04167in;height: 5.52083in" title="Amazon Quick Sight findings dashboard: a filterable table with one row per lease-rule pai…
+ &lt;p class="wp-caption-text"&gt;Figure 3: Amazon Quick Sight dashboard listing every finding from the sweep&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;The dashboard displays every finding from the sweep, one row per lease-rule pair. Use the severity band filter to isolate in-breach findings. Each row carries the lease ID, the rule that fired, the extracted value, and the expected value. Sort by rule to group related violations and identif…
+&lt;h3 id="drill-into-a-single-finding"&gt;Drill into a single finding&lt;/h3&gt;
+&lt;p&gt;Selecting a row opens the finding detail. Figure 4 shows a single finding, with the verbatim lease clause on one side and the rule that fired on the other, including its version, citation, and the compared values.&lt;/p&gt;
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/09/30/ML-21832-4.png" target="_blank" rel="noopener"&gt;&lt;img style="width: 6.04167in;height: 3.72917in" title="Finding detail view: the verbatim lease clause on the left, and on the right the rule tha…
+ &lt;p class="wp-caption-text"&gt;Figure 4: Finding detail showing the lease clause alongside the rule that fired&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;This is what defensibility looks like in practice. The finding shows the extracted value (7 percent late fee), the required value (5 percent cap), and the rule citation (TX Prop. Code ch. 92 subch. B, as amended eff. 2026-01-01). All of this appears alongside the clause text verbatim from t…
+&lt;h3 id="test-additional-routing-paths"&gt;Test additional routing paths&lt;/h3&gt;
+&lt;p&gt;Confirm Amazon Quick routes to the correct tool by testing the remaining operations:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;“Find Texas clauses that read like liability waivers.” (should invoke &lt;code&gt;explore_clauses&lt;/code&gt;).&lt;/li&gt;
+ &lt;li&gt;“What if the Texas late fee cap dropped to 3%?” (should invoke &lt;code&gt;simulate_rule_change&lt;/code&gt;).&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h2 id="cleanup"&gt;Cleanup&lt;/h2&gt;
+&lt;p&gt;To avoid ongoing charges, destroy the stack when you are finished:&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;npx aws-cdk@2.261.0 destroy&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;Aurora Serverless v2 can scale to 0 Aurora Capacity Units (ACU) and automatically pause after a period of inactivity (see &lt;a href="https://aws.amazon.com/rds/aurora/pricing/" target="_blank" rel="noopener"&gt;Amazon Aurora pricing&lt;/a&gt;). This sample sets a small non-zero minimum cap…
+&lt;p&gt;If you plan to return to the stack later but want to minimize cost between sessions, set &lt;code&gt;serverless_v2_min_capacity=0&lt;/code&gt; in &lt;code&gt;infra/stack.py&lt;/code&gt; and redeploy to enable scale-to-zero with auto-pause. Expect a short resume delay on the first query afte…
+&lt;h2 id="security-considerations"&gt;Security considerations&lt;/h2&gt;
+&lt;p&gt;Because this pattern is built for compliance work, security is part of the design rather than an add-on. The sample applies the following practices, and you should review each one against your own requirements before adapting it.&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;Authenticated access only.&lt;/strong&gt; Every request from Amazon Quick reaches the MCP server through an Amazon API Gateway HTTP API protected by a JSON Web Token (JWT) authorizer backed by Amazon Cognito. No unauthenticated route exists, and the two-legged (client creden…
+ &lt;li&gt;&lt;strong&gt;Secret handling.&lt;/strong&gt; The Amazon Cognito client secret is read at registration time and isn’t written to disk or committed to source control. Store it only in the Amazon Quick connector configuration, and rotate it on your normal schedule.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Least-privilege model access.&lt;/strong&gt; The AWS Lambda execution role grants Amazon Bedrock InvokeModel only for the specific Amazon Titan Text Embeddings V2 and Anthropic Claude Sonnet 5 model ARNs the sample uses, not a wildcard over all models. Scope AWS Identity and…
+ &lt;li&gt;&lt;strong&gt;Network isolation for the data path.&lt;/strong&gt; Amazon Quick Sight reaches Amazon Aurora Serverless v2 through a VPC connection rather than a public endpoint, and the database security group admits only the expected sources. Keep the store off the public internet.&lt;/li…
+ &lt;li&gt;&lt;strong&gt;No natural language in the query path.&lt;/strong&gt; The rules engine assembles SQL only from a fixed operator-to-template table with rule values bound as parameters, which removes the injection surface that a model-written query would create. This is a security property as…
+ &lt;li&gt;&lt;strong&gt;Auditable, append-only findings.&lt;/strong&gt; Findings are append-only, with no UPDATE or DELETE path in the code base, so the compliance record cannot be silently altered after the fact. Each determination carries its evidence chain for later review.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Synthetic data boundary.&lt;/strong&gt; The sample ships with synthetic lease data and clearly labeled placeholder rules and citations. Before running against real records, complete your organization’s data classification, access review, and legal validation of any rule cont…
+ &lt;li&gt;&lt;strong&gt;Human attribution of a sweep.&lt;/strong&gt; Amazon Quick authenticates to the MCP server machine-to-machine through the two-legged (client credentials) flow, so the token identifies the Amazon Quick application, not the individual who asked the question in chat. The engine …
+&lt;/ul&gt;
+&lt;h2 id="when-to-use-this-pattern"&gt;When to use this pattern&lt;/h2&gt;
+&lt;p&gt;The Adjudicated Query pattern applies whenever:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;A missed record is a liability rather than a mild inconvenience.&lt;/li&gt;
+ &lt;li&gt;Answers might be challenged months later by someone who was not in the room.&lt;/li&gt;
+ &lt;li&gt;The governing logic is externally owned and changes on its own schedule.&lt;/li&gt;
+ &lt;li&gt;The body of records is enumerable (you can list every record a question covers).&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;That description covers a wide range of domains. Examples include lease compliance, insurance claims adjudication, sanctions screening, export control, clinical trial protocol monitoring, building code inspection, financial reporting controls testing, and credential verification.&lt;/p&gt;
+&lt;p&gt;RAG is the simpler choice when plausible answers suffice and users can re-ask. Text-to-SQL works well for teams that can verify generated queries and tolerate occasional incorrect results. If accountable users will accept dashboards without a conversational layer, consider a rules engine pl…
+&lt;h2 id="when-this-is-the-wrong-choice"&gt;When this is the wrong choice&lt;/h2&gt;
+&lt;p&gt;The pattern is heavy: a rules engine, a bounded tool surface, and a completeness receipt. That machinery earns its keep only on the right problem, and copying it onto the wrong one adds cost without adding trust. Avoid the pattern in three cases.&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;The rules aren’t really deterministic.&lt;/strong&gt; The pattern works when compliance is a clean comparison, such as fee is less than or equal to a cap, or notice is greater than or equal to a required number of days. When the call is a genuine judgment, such as whether a …
+ &lt;li&gt;&lt;strong&gt;Completeness doesn’t matter for the question.&lt;/strong&gt; If the user only wants a few representative examples, or is exploring rather than adjudicating, the completeness receipt is overhead for a guarantee they don’t need. RAG is the simpler, correct answer for that kind…
+ &lt;li&gt;&lt;strong&gt;The population itself is fuzzy.&lt;/strong&gt; The receipt proves you covered every record in the population, not that the population is the right one. If the definition of “all Texas leases” is itself contestable, the guarantee is precise about the wrong denominator. Make s…
+&lt;/ul&gt;
+&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
+&lt;p&gt;In this post, we introduced the Adjudicated Query pattern and demonstrated how it delivers provably complete, defensible compliance answers through the Amazon Quick conversational interface. The pattern pairs a bounded MCP operation surface with a deterministic rules engine, so the model tr…
+&lt;p&gt;By deploying the sample stack, asking a compliance question in Amazon Quick chat, and following the results through the Amazon Quick Sight dashboard, you walked through the full pattern end to end. The completeness receipt accounts for every record, findings carry their full evidence chain,…
+&lt;p&gt;To get started, clone the &lt;a href="https://github.com/aws-samples/sample-quick-adjudicated-query" target="_blank" rel="noopener"&gt;sample repository&lt;/a&gt;, deploy the stack, register the MCP integration in Amazon Quick, and try asking your first compliance question.&lt;/p&gt;
+&lt;h2 id="resources"&gt;Resources&lt;/h2&gt;
+&lt;ul&gt;
+ &lt;li&gt;&lt;a href="https://aws.amazon.com/quick/" target="_blank" rel="noopener"&gt;Amazon Quick&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href="https://aws.amazon.com/bedrock/" target="_blank" rel="noopener"&gt;Amazon Bedrock&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href="https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html" target="_blank" rel="noopener"&gt;Amazon Aurora Serverless v2&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener"&gt;Model Context Protocol (MCP)&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href="https://github.com/aws-samples/sample-quick-adjudicated-query" target="_blank" rel="noopener"&gt;Sample repository on GitHub&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Related content&lt;/strong&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/machine-learning/build-an-intelligent-contract-management-solution-with-amazon-quick-suite-and-bedrock-agentcore/" target="_blank" rel="noopener"&gt;Build an intelligent contract management solution with Amazon Quick Suite and Amazon Bedrock AgentC…
+ &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/machine-learning/" target="_blank" rel="noopener"&gt;AWS Machine Learning Blog&lt;/a&gt;&lt;/li&gt;
+ &lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/architecture/" target="_blank" rel="noopener"&gt;AWS Architecture Blog&lt;/a&gt;&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p style="clear: both"&gt;&lt;/p&gt;
+&lt;hr style="width: 100%"&gt;
+&lt;h2&gt;About the author&lt;/h2&gt;
+&lt;footer&gt;
+ &lt;div class="blog-author-box" style="padding-top: 2.0em"&gt;
+ &lt;div class="blog-author-image" style="margin-right: 1.0em"&gt;
+ &lt;img loading="lazy" class="alignnone size-full" src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/09/30/ML-21832-5.jpg" alt="Anand Komandooru" width="100" height="133"&gt;
+ &lt;/div&gt;
+ &lt;h3 class="lb-h4"&gt;Anand Komandooru&lt;/h3&gt;
+ &lt;p style="overflow: hidden"&gt;Anand is a Principal Solutions Architect on the Well-Architected Solutions Innovation team at AWS, with over 20 years of experience building software and helping customers design and deliver cloud-native and AI applications. Outside of work, he writes about AI arc…
+ &lt;/div&gt;
+&lt;/footer&gt;</content:encoded>
+
+
+
+ </item>
+ <item>
+ <title>Add secure Web Search to Claude Desktop with Amazon Bedrock AgentCore</title>
+ <link>https://aws.amazon.com/blogs/machine-learning/add-secure-web-search-to-claude-desktop-with-amazon-bedrock-agentcore/</link>
+
+ <dc:creator><![CDATA[Jishnu Dasgupta]]></dc:creator>
+ <pubDate>Fri, 02 Oct 2026 15:46:05 +0000</pubDate>
+ <category><![CDATA[Advanced (300)]]></category>
+ <category><![CDATA[Amazon Bedrock]]></category>
+ <category><![CDATA[Amazon Bedrock AgentCore]]></category>
+ <category><![CDATA[Technical How-to]]></category>
+ <guid isPermaLink="false">f34004e8575c136497f5d3d9f5a7791f5549d448</guid>
+
+ <description>Claude Desktop on Amazon Bedrock is limited to the model's knowledge cutoff without web search. In this post, we walk through connecting Claude Desktop to Web Search using Amazon Bedrock AgentCore Gateway, with JWT-based inbound authentication through AWS IAM Identity Center and Am…
+ <content:encoded>&lt;p&gt;&lt;a href="https://claude.com/docs/third-party/claude-desktop/overview" target="_blank" rel="noopener"&gt;Claude Desktop&lt;/a&gt; on &lt;a href="https://aws.amazon.com/bedrock/" target="_blank" rel="noopener"&gt;Amazon Bedrock&lt;/a&gt; provides powerful AI assi…
+&lt;p&gt;&lt;a href="https://aws.amazon.com/bedrock/agentcore/" target="_blank" rel="noopener"&gt;Amazon Bedrock AgentCore&lt;/a&gt; is a platform to build, connect, and optimize agents at scale, with any framework or model. With &lt;a href="https://aws.amazon.com/blogs/machine-learning/introducing-…
+&lt;p&gt;With Claude Desktop, you can use &lt;a href="https://claude.com/docs/third-party/claude-desktop/extensions#managed-mcp-servers-admin" target="_blank" rel="noopener"&gt;managed MCP servers&lt;/a&gt; to connect to an AgentCore Gateway with the Web Search target enabled. In this post, we walk …
+&lt;h2 id="architecture"&gt;Architecture&lt;/h2&gt;
+&lt;p&gt;Many enterprises running on AWS use &lt;a href="https://aws.amazon.com/iam/identity-center/" target="_blank" rel="noopener"&gt;AWS IAM Identity Center&lt;/a&gt; for single sign-on (SSO) access to their AWS accounts. In this walkthrough, we use AWS IAM Identity Center as the authentication s…
+&lt;p&gt;To bridge AWS IAM Identity Center with the AgentCore Gateway JWT-based authentication, we use &lt;a href="https://aws.amazon.com/pm/cognito/" target="_blank" rel="noopener"&gt;Amazon Cognito&lt;/a&gt; as a federation layer with the OAuth 2.0 authorization code grant flow. IAM Identity Cente…
+&lt;p&gt;The following sequence diagram illustrates this authentication flow.&lt;/p&gt;
+&lt;div style="width: 810px" class="wp-caption alignnone"&gt;
+ &lt;a href="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/01/ML-21694-1.png" target="_blank" rel="noopener"&gt;&lt;img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2026/10/01/ML-21694-1.png" alt="Sequence diagram of the…
+ &lt;p class="wp-caption-text"&gt;Figure 1: User authentication and authorization sequence diagram&lt;/p&gt;
+&lt;/div&gt;
+&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
+&lt;p&gt;To follow along with the steps in this post, you need the following:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;An AWS account with permissions to create &lt;a href="https://aws.amazon.com/iam/" target="_blank" rel="noopener"&gt;AWS Identity and Access Management (IAM)&lt;/a&gt; roles and Amazon Bedrock AgentCore resources.&lt;/li&gt;
+ &lt;li&gt;Admin access to your management account in AWS Organizations (for AWS IAM Identity Center configuration).&lt;/li&gt;
+ &lt;li&gt;AWS IAM Identity Center preconfigured for SSO access to AWS accounts.&lt;/li&gt;
+ &lt;li&gt;Claude Desktop set up with Amazon Bedrock as the inference provider.&lt;/li&gt;
+ &lt;li&gt;The AWS Command Line Interface (AWS CLI) v2 installed and configured.&lt;/li&gt;
+ &lt;li&gt;Python 3.10 or later.&lt;/li&gt;
+ &lt;li&gt;The Boto3 SDK updated to the latest version.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;Web Search on Amazon Bedrock AgentCore is currently available in the US East (N. Virginia) AWS Region (us-east-1), Europe (Ireland) Region (eu-west-1), and Asia Pacific (Tokyo) Region (ap-northeast-1). Verify that your gateway is created in one of these Regions.&lt;/p&gt;
+&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
+&lt;p&gt;The configuration involves setting up the authentication chain (AWS IAM Identity Center to Amazon Cognito to JWT) and then wiring the AgentCore Gateway into Claude Desktop. We walk through each step in the following section.&lt;/p&gt;
+&lt;h3 id="step-1-create-an-amazon-cognito-user-pool"&gt;Step 1: Create an Amazon Cognito user pool&lt;/h3&gt;
+&lt;p&gt;In your target AWS account, create an Amazon Cognito user pool that will serve as the OpenID Connect (OIDC) token issuer for the AgentCore Gateway.&lt;/p&gt;
+&lt;div class="hide-language"&gt;
+ &lt;pre&gt;&lt;code class="language-bash"&gt;export AWS_REGION=&amp;lt;your-region&amp;gt;
+
+# Create User Pool
+aws cognito-idp create-user-pool \
+ --pool-name "agentcore-websearch-pool" \
+ --region $AWS_REGION \
+ --auto-verified-attributes email \
+ --schema '[{"Name":"email","Required":true,"Mutable":true,"AttributeDataType":"String"}]' \
+ --username-attributes email \
+ --username-configuration "CaseSensitive=false" \
+ --mfa-configuration "OFF"
+
+# Note the Pool ID
+export USER_POOL_ID=$(aws cognito-idp list-user-pools --max-results 10 \
+ --region $AWS_REGION \
+ --query "UserPools[?Name=='agentcore-websearch-pool'].Id" --output text)
+echo "User Pool ID: $USER_POOL_ID"
+
+# Create a domain (must be globally unique)
+aws cognito-idp create-user-pool-domain \
+ --domain "&amp;lt;your-unique-prefix&amp;gt;" \
+ --user-pool-id $USER_POOL_ID \
+ --region $AWS_REGION&lt;/code&gt;&lt;/pre&gt;
+&lt;/div&gt;
+&lt;p&gt;Save these values for later steps:&lt;/p&gt;
+&lt;ul&gt;
+ &lt;li&gt;&lt;strong&gt;User Pool ID:&lt;/strong&gt; &lt;code&gt;$USER_POOL_ID&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Domain&lt;/strong&gt;: &lt;code&gt;&amp;lt;your-unique-prefix&amp;gt;.auth.&amp;lt;region&amp;gt;.amazoncognito.com&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;Audience&lt;/strong&gt;: &lt;code&gt;urn:amazon:cognito:sp:&amp;lt;user-pool-id&amp;gt;&lt;/code&gt;.&lt;/li&gt;
+ &lt;li&gt;&lt;strong&gt;ACS URL:&lt;/strong&gt; &lt;code&gt;https://&amp;lt;your-unique-prefix&amp;gt;.auth.&amp;lt;region&amp;gt;.amazoncognito.com/saml2/idpresponse&lt;/code&gt;.&lt;/li&gt;
+&lt;/ul&gt;
+&lt;h3 id="step-2-configure-iam-identity-center-saml-application"&gt;Step 2: Configure IAM Identity Center SAML application&lt;/h3&gt;

Diff display stops at 400 lines. The line counts above are from the whole diff. 48 lines shown here cut at 300 characters. The raw artifact at this commit is linked above.