<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MCP Servers]]></title><description><![CDATA[MCP Servers]]></description><link>https://mcp-servers.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 13:45:27 GMT</lastBuildDate><atom:link href="https://mcp-servers.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Supercharge Your AI Workflows with AWS MCP Servers in Minutes]]></title><description><![CDATA[1. Which AWS MCP Servers Are Available (and What They Do)
AWS maintains a whole suite of pre-built MCP servers (“AWS MCP Servers”) under the awslabs/mcp GitHub monorepo. Each server exposes a specific AWS domain (CDK, Cost Analysis, CloudFormation, L...]]></description><link>https://mcp-servers.hashnode.dev/supercharge-your-ai-workflows-with-aws-mcp-servers-in-minutes</link><guid isPermaLink="true">https://mcp-servers.hashnode.dev/supercharge-your-ai-workflows-with-aws-mcp-servers-in-minutes</guid><category><![CDATA[AWS]]></category><category><![CDATA[mcp server]]></category><category><![CDATA[genai]]></category><category><![CDATA[bedrock]]></category><category><![CDATA[solutionarchitect]]></category><dc:creator><![CDATA[Remus  Kalathil]]></dc:creator><pubDate>Sat, 14 Jun 2025 07:58:04 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-1-which-aws-mcp-servers-are-available-and-what-they-do">1. Which AWS MCP Servers Are Available (and What They Do)</h2>
<p>AWS maintains a whole suite of <strong>pre-built MCP servers</strong> (“AWS MCP Servers”) under the <strong>awslabs/mcp</strong> GitHub monorepo. Each server exposes a specific AWS domain (CDK, Cost Analysis, CloudFormation, Lambda, DynamoDB, Serverless, etc.) over the standard MCP JSON-RPC interface.</p>
<p>Below is a sample of the most common ones (full list in the “Available Servers” section of the repo): <a target="_blank" href="https://github.com/awslabs/mcp">github.comgithub.com</a></p>
<ul>
<li><p><strong>Core MCP Server</strong> (<code>awslabs.core-mcp-server</code>):</p>
<ul>
<li>Orchestrates multiple AWS MCP servers (planning, guidance, federating)</li>
</ul>
</li>
<li><p><strong>AWS Documentation MCP Server</strong> (<code>awslabs.aws-documentation-mcp-server</code>):</p>
<ul>
<li>Search and fetch AWS docs/pages, convert to markdown, surface best practices</li>
</ul>
</li>
<li><p><strong>Cost Analysis MCP Server</strong> (<code>awslabs.cost-analysis-mcp-server</code>):</p>
<ul>
<li>Query AWS Cost Explorer in natural language, generate cost reports/insights</li>
</ul>
</li>
<li><p><strong>AWS CDK MCP Server</strong> (<code>awslabs.cdk-mcp-server</code>):</p>
<ul>
<li>Provide CDK guidance, construct recommendations, Well-Architected checks</li>
</ul>
</li>
<li><p><strong>AWS CloudFormation MCP Server</strong> (<code>awslabs.cfn-mcp-server</code>):</p>
<ul>
<li>Create/describe/update/delete CloudFormation stacks and resources via MCP</li>
</ul>
</li>
<li><p><strong>AWS Lambda MCP Server</strong> (<code>awslabs.lambda-mcp-server</code>):</p>
<ul>
<li>List/invoke Lambda functions, manage function configurations, etc.</li>
</ul>
</li>
<li><p><strong>Amazon SNS / SQS MCP Server</strong> (<code>awslabs.sns-sqs-mcp-server</code>):</p>
<ul>
<li>Create topics/queues, publish/subscribe, send/receive messages</li>
</ul>
</li>
<li><p><strong>AWS Step Functions MCP Server</strong> (<code>awslabs.step-functions-mcp-server</code>):</p>
<ul>
<li>Execute or inspect Step Functions state machines as an MCP “tool”</li>
</ul>
</li>
<li><p><strong>AWS Serverless MCP Server</strong> (<code>awslabs.aws-serverless-mcp-server</code>):</p>
<ul>
<li>Build/deploy/test SAM apps, retrieve logs/metrics for Lambda/API Gateway, guide on serverless best practices</li>
</ul>
</li>
<li><p><strong>Amazon DynamoDB MCP Server</strong> (<code>awslabs.dynamodb-mcp-server</code>):</p>
<ul>
<li>Create/update tables, and do data-plane operations (put/get/query/scan) via natural language</li>
</ul>
</li>
<li><p><strong>Amazon EKS MCP Server</strong> (<code>awslabs.eks-mcp-server</code>):</p>
<ul>
<li>Help with cluster creation, deploying workloads, and troubleshooting Kubernetes resources and more (e.g., AWS Diagram, AWS Kendra, Amazon S3, Amazon Aurora, ElastiCache, etc.).</li>
</ul>
</li>
</ul>
<blockquote>
<p>🔗 To see the full list (and click “Learn more” or “Documentation” for each):<br /><a target="_blank" href="https://github.com/awslabs/mcp/tree/main/src">https://github.com/awslabs/mcp/tree/main/src</a></p>
</blockquote>
<hr />
<h2 id="heading-2-install-uvx-the-mcp-launcher">2. Install <code>uvx</code> (the MCP Launcher)</h2>
<p>All AWS-published MCP servers are packaged in PyPI (or as Node/Go modules), and the recommended way to run them is via <code>uvx</code> (part of the Astral “uv” toolchain). Essentially, <code>uvx</code> lets you pull down and run a pre-built MCP server with one command.</p>
<h3 id="heading-21-why-uvx">2.1. Why <code>uvx</code>?</h3>
<ul>
<li><p><strong>”Plug-and-play”</strong>: No need to clone/build each server.</p>
</li>
<li><p><strong>Auto-updates</strong>: By default, <code>{"args":["awslabs.cost-analysis-mcp-server@latest"]}</code> always fetches the most recent version from PyPI.</p>
</li>
<li><p><strong>Consistent</strong>: All AWS MCP servers use the same “<code>uvx</code> + PyPI” distribution mechanism.</p>
</li>
</ul>
<h3 id="heading-22-installing-uvx">2.2. Installing <code>uvx</code></h3>
<p>You can install the <code>uv</code> tool (which includes <code>uvx</code>) on macOS, Linux, or Windows. The <strong>quickest</strong> methods are via Homebrew or pipx.</p>
<details><summary>macOS or Linux (Homebrew)</summary><div data-type="detailsContent"></div></details>

<pre><code class="lang-bash">1. Install or update Homebrew <span class="hljs-keyword">if</span> you haven’t yet:
<span class="hljs-comment">#    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</span>

brew update
brew install uv   <span class="hljs-comment"># installs the 'uv' package manager, which includes 'uvx'</span>

<span class="hljs-comment"># Verify uv and uvx:</span>
uv --version      <span class="hljs-comment"># should print something like: uv 0.7.x</span>
uvx --version     <span class="hljs-comment"># should print something like: uvx 0.5.x</span>
</code></pre>
<details><summary>macOS or Linux (pipx)</summary><div data-type="detailsContent"></div></details>

<pre><code class="lang-bash"><span class="hljs-comment"># (Recommended if you prefer pipx/immediate Python isolation)</span>
pipx install uv   <span class="hljs-comment"># this also installs uvx</span>

<span class="hljs-comment"># OR, if you already use pipx to manage artifactory:</span>
pipx install uvx

<span class="hljs-comment"># Verify:</span>
uv --version
uvx --version
</code></pre>
<details><summary>Windows (winget)</summary><div data-type="detailsContent"></div></details>

<pre><code class="lang-powershell"><span class="hljs-comment"># 1. Open PowerShell as Administrator</span>
winget install astral<span class="hljs-literal">-sh</span>.uv <span class="hljs-literal">-e</span>

<span class="hljs-comment"># Restart PowerShell (or log out/in)</span>
uv -<span class="hljs-literal">-version</span>      <span class="hljs-comment"># expect uv 0.7.x</span>
uvx -<span class="hljs-literal">-version</span>     <span class="hljs-comment"># expect uvx 0.5.x+</span>
</code></pre>
<blockquote>
<p><strong>Tip:</strong> If you see <code>“uvx: command not found”</code>, make sure your PATH was updated, or reinstall using Homebrew/pipx so you get both <code>uv</code> and <code>uvx</code>. <a target="_blank" href="https://docs.astral.sh/uv/getting-started/installation/?utm_source=chatgpt.com">docs.astral.sh</a><a target="_blank" href="https://medium.com/%40richardhightower/anthropics-mcp-set-up-git-mcp-agentic-tooling-with-claude-desktop-beceb283a59c?utm_source=chatgpt.com">medium.com</a></p>
</blockquote>
<hr />
<h2 id="heading-3-launching-an-aws-mcp-server-via-uvx">3. Launching an AWS MCP Server via <code>uvx</code></h2>
<p>Once <code>uvx</code> is available, you can start any of the AWS MCP servers with a single command. In the GitHub README, AWS provides a JSON snippet that shows how all the servers are configured. We’ll copy that pattern for whichever server(s) you need.</p>
<h3 id="heading-31-example-start-the-cost-analysis-mcp-server">3.1. Example: Start the <strong>Cost Analysis MCP Server</strong></h3>
<p>This server “analyzes and visualizes AWS costs” by wrapping Cost Explorer. To run it locally:</p>
<pre><code class="lang-bash">uvx awslabs.cost-analysis-mcp-server@latest \
  --env AWS_PROFILE=your-aws-profile \
  --env FASTMCP_LOG_LEVEL=INFO
</code></pre>
<ul>
<li><p><code>awslabs.cost-analysis-mcp-server@latest</code></p>
<ul>
<li>Tells <code>uvx</code> to fetch the latest Cost Analysis MCP package from PyPI.</li>
</ul>
</li>
<li><p><code>--env AWS_PROFILE=your-aws-profile</code></p>
<ul>
<li>(Optional) If you have a named AWS CLI profile, specify it so the server uses those credentials.</li>
</ul>
</li>
<li><p><code>--env FASTMCP_LOG_LEVEL=INFO</code></p>
<ul>
<li>Controls logging verbosity (ERROR, WARN, INFO, DEBUG).</li>
</ul>
</li>
</ul>
<p>Once this runs successfully, you’ll see:</p>
<pre><code class="lang-plaintext">Cost Analysis MCP Server listening on port 8000 (default)
</code></pre>
<p>By default, most AWS MCP servers listen on <code>http://localhost:8000/</code> (unless otherwise configured).</p>
<blockquote>
<p>🔗 Official config snippet from AWS MCP README <a target="_blank" href="https://github.com/awslabs/mcp/blob/main/src/cfn-mcp-server/README.md">github.com</a></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"awslabs.cost-analysis-mcp-server"</span>: {
    <span class="hljs-attr">"command"</span>: <span class="hljs-string">"uvx"</span>,
    <span class="hljs-attr">"args"</span>: [<span class="hljs-string">"awslabs.cost-analysis-mcp-server@latest"</span>],
    <span class="hljs-attr">"env"</span>: {
      <span class="hljs-attr">"AWS_PROFILE"</span>: <span class="hljs-string">"your-aws-profile"</span>,
      <span class="hljs-attr">"FASTMCP_LOG_LEVEL"</span>: <span class="hljs-string">"ERROR"</span>
    }
  }
}
</code></pre>
</blockquote>
<h3 id="heading-32-example-start-the-aws-serverless-mcp-server">3.2. Example: Start the <strong>AWS Serverless MCP Server</strong></h3>
<p>If you want a single MCP server that covers <strong>Serverless Application Model (SAM)</strong> lifecycle (init, build, deploy, test), plus retrieving logs/metrics for Lambda and API Gateway, use:</p>
<pre><code class="lang-bash">uvx awslabs.aws-serverless-mcp-server@latest \
  --env AWS_PROFILE=your-aws-profile \
  --env AWS_REGION=us-east-1 \
  --env FASTMCP_LOG_LEVEL=INFO
</code></pre>
<ul>
<li><p>This launches a server you can query (via MCP JSON-RPC) for any “serverless” task:</p>
<ul>
<li><p>“Show me logs for my function <code>MyFunction</code> in ap-southeast-2”</p>
</li>
<li><p>“Generate a SAM template for a new HTTP API + Lambda + DynamoDB”</p>
</li>
<li><p>etc.</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-33-launch-multiple-servers-at-once-core-others">3.3. Launch Multiple Servers at Once (Core + Others)</h3>
<p>If you want an <strong>umbrella setup</strong> (Core + CDK + Cost + Documentation + Lambda + CloudFormation + …), you can feed <code>uvx</code> a JSON config file that lists all servers. For example, create <code>mcp-config.json</code>:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"mcpServers"</span>: {
    <span class="hljs-attr">"awslabs.core-mcp-server"</span>: {
      <span class="hljs-attr">"command"</span>: <span class="hljs-string">"uvx"</span>,
      <span class="hljs-attr">"args"</span>: [<span class="hljs-string">"awslabs.core-mcp-server@latest"</span>],
      <span class="hljs-attr">"env"</span>: {
        <span class="hljs-attr">"FASTMCP_LOG_LEVEL"</span>: <span class="hljs-string">"ERROR"</span>
      }
    },
    <span class="hljs-attr">"awslabs.aws-documentation-mcp-server"</span>: {
      <span class="hljs-attr">"command"</span>: <span class="hljs-string">"uvx"</span>,
      <span class="hljs-attr">"args"</span>: [<span class="hljs-string">"awslabs.aws-documentation-mcp-server@latest"</span>],
      <span class="hljs-attr">"env"</span>: {
        <span class="hljs-attr">"FASTMCP_LOG_LEVEL"</span>: <span class="hljs-string">"ERROR"</span>
      }
    },
    <span class="hljs-attr">"awslabs.cost-analysis-mcp-server"</span>: {
      <span class="hljs-attr">"command"</span>: <span class="hljs-string">"uvx"</span>,
      <span class="hljs-attr">"args"</span>: [<span class="hljs-string">"awslabs.cost-analysis-mcp-server@latest"</span>],
      <span class="hljs-attr">"env"</span>: {
        <span class="hljs-attr">"AWS_PROFILE"</span>: <span class="hljs-string">"your-aws-profile"</span>,
        <span class="hljs-attr">"FASTMCP_LOG_LEVEL"</span>: <span class="hljs-string">"ERROR"</span>
      }
    },
    <span class="hljs-attr">"awslabs.aws-serverless-mcp-server"</span>: {
      <span class="hljs-attr">"command"</span>: <span class="hljs-string">"uvx"</span>,
      <span class="hljs-attr">"args"</span>: [<span class="hljs-string">"awslabs.aws-serverless-mcp-server@latest"</span>],
      <span class="hljs-attr">"env"</span>: {
        <span class="hljs-attr">"AWS_PROFILE"</span>: <span class="hljs-string">"your-aws-profile"</span>,
        <span class="hljs-attr">"AWS_REGION"</span>: <span class="hljs-string">"us-east-1"</span>,
        <span class="hljs-attr">"FASTMCP_LOG_LEVEL"</span>: <span class="hljs-string">"ERROR"</span>
      }
    }
    <span class="hljs-comment">// …add more servers as needed…</span>
  }
}
</code></pre>
<p>Then run:</p>
<pre><code class="lang-bash">uvx --config ./mcp-config.json
</code></pre>
<p><code>uvx</code> will spin up each server in its own process. By default, each one listens on a different port (starting at 8000, then 8001, 8002, etc.), and the Core MCP server (if you launch it) will “know” how to route calls to the others. <a target="_blank" href="https://github.com/awslabs/mcp/blob/main/src/cfn-mcp-server/README.md">github.com</a></p>
<hr />
<h2 id="heading-4-invoking-an-aws-mcp-server-from-a-client">4. Invoking an AWS MCP Server from a Client</h2>
<p>Once your AWS MCP server is running locally (e.g., on <code>http://localhost:8000</code>), you can call it exactly like <strong>any other MCP server</strong> over JSON-RPC 2.0. Below are <strong>two common approaches</strong>:</p>
<ol>
<li><p>Use a minimal MCP client script (Node.js or Python)</p>
</li>
<li><p>Use Amazon Bedrock Inline Agents (e.g., with Spring AI or Amazon Bedrock Converse API)</p>
</li>
</ol>
<h3 id="heading-41-example-nodejs-mcp-client-for-cost-analysis">4.1. Example: Node.js MCP Client for Cost Analysis</h3>
<p>Here’s a quick Node.js script that calls the <strong>Cost Analysis MCP server</strong> (running on <code>localhost:8000</code>) to retrieve May 2025 AWS blended costs.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># 1. Create a new folder for your client:</span>
mkdir mcp-client &amp;&amp; <span class="hljs-built_in">cd</span> mcp-client
npm init -y
npm install axios uuid
</code></pre>
<p>Create <code>index.js</code>:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// index.js</span>
<span class="hljs-keyword">import</span> axios <span class="hljs-keyword">from</span> <span class="hljs-string">'axios'</span>;
<span class="hljs-keyword">import</span> { v4 <span class="hljs-keyword">as</span> uuidv4 } <span class="hljs-keyword">from</span> <span class="hljs-string">'uuid'</span>;

<span class="hljs-comment">// URL of the Cost Analysis MCP Server</span>
<span class="hljs-keyword">const</span> MCP_URL = <span class="hljs-string">'http://localhost:8000/'</span>;  

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getCostAndUsage</span>(<span class="hljs-params">startDate, endDate</span>) </span>{
  <span class="hljs-keyword">const</span> requestBody = {
    <span class="hljs-attr">jsonrpc</span>: <span class="hljs-string">'2.0'</span>,
    <span class="hljs-attr">id</span>: uuidv4(),
    <span class="hljs-attr">method</span>: <span class="hljs-string">'GetCostAndUsage'</span>,       <span class="hljs-comment">// MCP method name</span>
    <span class="hljs-attr">params</span>: {
      <span class="hljs-attr">TimePeriod</span>: { <span class="hljs-attr">Start</span>: startDate, <span class="hljs-attr">End</span>: endDate },
      <span class="hljs-attr">Granularity</span>: <span class="hljs-string">'MONTHLY'</span>,
      <span class="hljs-attr">Metrics</span>: [<span class="hljs-string">'BlendedCost'</span>]
    }
  };

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> resp = <span class="hljs-keyword">await</span> axios.post(MCP_URL, requestBody, {
      <span class="hljs-attr">headers</span>: { <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'application/json'</span> }
    });

    <span class="hljs-keyword">if</span> (resp.data.error) {
      <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'MCP Error:'</span>, resp.data.error);
    } <span class="hljs-keyword">else</span> {
      <span class="hljs-built_in">console</span>.log(
        <span class="hljs-string">'Cost Explorer Response:'</span>,
        <span class="hljs-built_in">JSON</span>.stringify(resp.data.result, <span class="hljs-literal">null</span>, <span class="hljs-number">2</span>)
      );
    }
  } <span class="hljs-keyword">catch</span> (err) {
    <span class="hljs-built_in">console</span>.error(<span class="hljs-string">'HTTP Error:'</span>, err.message);
  }
}

(<span class="hljs-keyword">async</span> () =&gt; {
  <span class="hljs-comment">// Example: query May 1–31, 2025</span>
  <span class="hljs-keyword">await</span> getCostAndUsage(<span class="hljs-string">'2025-05-01'</span>, <span class="hljs-string">'2025-05-31'</span>);
})();
</code></pre>
<p>Run it:</p>
<pre><code class="lang-plaintext">node index.js
</code></pre>
<p>If your <code>uvx awslabs.cost-analysis-mcp-server@latest</code> is up and your AWS credentials allow Cost Explorer read, you’ll see something like:</p>
<pre><code class="lang-json">Cost Explorer Response: {
  <span class="hljs-attr">"ResultsByTime"</span>: [
    {
      <span class="hljs-attr">"TimePeriod"</span>: { <span class="hljs-attr">"Start"</span>: <span class="hljs-string">"2025-05-01"</span>, <span class="hljs-attr">"End"</span>: <span class="hljs-string">"2025-05-31"</span> },
      <span class="hljs-attr">"Total"</span>: { <span class="hljs-attr">"BlendedCost"</span>: { <span class="hljs-attr">"Amount"</span>: <span class="hljs-string">"123.45"</span>, <span class="hljs-attr">"Unit"</span>: <span class="hljs-string">"USD"</span> } },
      …
    }
  ]
}
</code></pre>
<p>confirming that the AWS MCP server forwarded your JSON-RPC call all the way to <code>CostExplorer.getCostAndUsage()</code></p>
<hr />
<h3 id="heading-42-example-python-mcp-client-using-mcp-client-for-testing">4.2. Example: Python MCP Client (using <code>mcp-client-for-testing</code>)</h3>
<p>If you prefer Python, the <a target="_blank" href="https://pypi.org/project/mcp-client-for-testing/"><code>mcp-client-for-testing</code></a> package can simplify calling an MCP server. First, install it:</p>
<pre><code class="lang-bash"><span class="hljs-comment"># Inside a virtualenv (recommended)</span>
pip install mcp-client-for-testing
</code></pre>
<p>Then create a simple script <code>call_cost.py</code>:</p>
<pre><code class="lang-python"><span class="hljs-comment"># call_cost.py</span>
<span class="hljs-keyword">import</span> asyncio
<span class="hljs-keyword">from</span> mcp_client_for_testing.client <span class="hljs-keyword">import</span> execute_tool

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">main</span>():</span>
    <span class="hljs-comment"># Configuration for Cost Analysis MCP (point to uvx-launched server)</span>
    config = [
        {
            <span class="hljs-string">"name"</span>: <span class="hljs-string">"cost-analysis"</span>,
            <span class="hljs-string">"command"</span>: <span class="hljs-string">"http"</span>,
            <span class="hljs-string">"args"</span>: [<span class="hljs-string">"localhost:8000"</span>],  
            <span class="hljs-string">"env"</span>: {}
        }
    ]

    <span class="hljs-comment"># Build the JSON-RPC CallToolRequest</span>
    tool_call = {
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"GetCostAndUsage"</span>,
        <span class="hljs-string">"arguments"</span>: {
            <span class="hljs-string">"TimePeriod"</span>: { <span class="hljs-string">"Start"</span>: <span class="hljs-string">"2025-05-01"</span>, <span class="hljs-string">"End"</span>: <span class="hljs-string">"2025-05-31"</span> },
            <span class="hljs-string">"Granularity"</span>: <span class="hljs-string">"MONTHLY"</span>,
            <span class="hljs-string">"Metrics"</span>: [<span class="hljs-string">"BlendedCost"</span>]
        }
    }

    result = <span class="hljs-keyword">await</span> execute_tool(config, tool_call)
    print(<span class="hljs-string">"MCP Result:"</span>, result)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    asyncio.run(main())
</code></pre>
<p>Run it:</p>
<pre><code class="lang-plaintext">python call_cost.py
</code></pre>
<p>You’ll see the JSON that includes AWS Cost Explorer’s output.</p>
<p>Python client script (<code>call_</code><a target="_blank" href="http://cost.py"><code>cost.py</code></a>) will send and receive when the MCP server is up:</p>
<pre><code class="lang-json">Request Body:
{
  <span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
  <span class="hljs-attr">"id"</span>: <span class="hljs-string">"123e4567-e89b-12d3-a456-426614174000"</span>,
  <span class="hljs-attr">"method"</span>: <span class="hljs-string">"GetCostAndUsage"</span>,
  <span class="hljs-attr">"params"</span>: {
    <span class="hljs-attr">"TimePeriod"</span>: {
      <span class="hljs-attr">"Start"</span>: <span class="hljs-string">"2025-05-01"</span>,
      <span class="hljs-attr">"End"</span>: <span class="hljs-string">"2025-05-31"</span>
    },
    <span class="hljs-attr">"Granularity"</span>: <span class="hljs-string">"MONTHLY"</span>,
    <span class="hljs-attr">"Metrics"</span>: [
      <span class="hljs-string">"BlendedCost"</span>
    ]
  }
}

Response:
{
  <span class="hljs-attr">"jsonrpc"</span>: <span class="hljs-string">"2.0"</span>,
  <span class="hljs-attr">"id"</span>: <span class="hljs-string">"123e4567-e89b-12d3-a456-426614174000"</span>,
  <span class="hljs-attr">"result"</span>: {
    <span class="hljs-attr">"ResultsByTime"</span>: [
      {
        <span class="hljs-attr">"TimePeriod"</span>: {
          <span class="hljs-attr">"Start"</span>: <span class="hljs-string">"2025-05-01"</span>,
          <span class="hljs-attr">"End"</span>: <span class="hljs-string">"2025-05-31"</span>
        },
        <span class="hljs-attr">"Total"</span>: {
          <span class="hljs-attr">"BlendedCost"</span>: {
            <span class="hljs-attr">"Amount"</span>: <span class="hljs-string">"123.45"</span>,
            <span class="hljs-attr">"Unit"</span>: <span class="hljs-string">"USD"</span>
          }
        }
      }
    ]
  }
}
</code></pre>
<p>This mirrors the Node.js example confirming that your Python client can send the JSON-RPC request to the MCP server and receive the cost data in the same format.</p>
<hr />
<h3 id="heading-43-example-integrating-with-amazon-bedrock-inline-agents">4.3. Example: Integrating with Amazon Bedrock Inline Agents</h3>
<p>If you’re using an LLM (e.g., Claude Desktop, Q Developer, or Amazon Bedrock Agents), you can register your locally running AWS MCP servers as action groups. Then, when your model needs AWS context, it simply calls the MCP server.</p>
<p>Below is a pseudocode snippet (adapted from AWS’s “Harness the power of MCP servers with Amazon Bedrock Agents” guide): <a target="_blank" href="https://aws.amazon.com/blogs/machine-learning/harness-the-power-of-mcp-servers-with-amazon-bedrock-agents/?utm_source=chatgpt.com">aws.amazon.com</a><a target="_blank" href="https://community.aws/content/2v8AETAkyvPp9RVKC4YChncaEbs/running-mcp-based-agents-clients-servers-on-aws?lang=en&amp;utm_source=chatgpt.com">community.aws</a></p>
<pre><code class="lang-json"><span class="hljs-comment">// sample agent configuration (e.g., in your Bedrock inline Agent settings)</span>
{
  <span class="hljs-attr">"ActionGroups"</span>: [
    {
      <span class="hljs-attr">"Name"</span>: <span class="hljs-string">"CostExplorerGroup"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"MCP"</span>,
      <span class="hljs-attr">"Endpoint"</span>: <span class="hljs-string">"http://localhost:8000"</span>,        <span class="hljs-comment">// your cost-analysis server</span>
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"Query AWS Cost Explorer data"</span>
    },
    {
      <span class="hljs-attr">"Name"</span>: <span class="hljs-string">"ServerlessGroup"</span>,
      <span class="hljs-attr">"Type"</span>: <span class="hljs-string">"MCP"</span>,
      <span class="hljs-attr">"Endpoint"</span>: <span class="hljs-string">"http://localhost:8001"</span>,        <span class="hljs-comment">// your aws-serverless server</span>
      <span class="hljs-attr">"Description"</span>: <span class="hljs-string">"Deploy and manage SAM apps"</span>
    }
    <span class="hljs-comment">// …add more MCP action groups as needed</span>
  ]
}
</code></pre>
<p>When your Bedrock Agent runs, it can do:</p>
<blockquote>
<p><strong>User (prompt):</strong> “Show me the monthly cost for my prod account last month.”<br /><strong>Bedrock Agent → MCP Client</strong> → MCP Server “CostAnalysis” → AWS Cost Explorer → return JSON → Agent synthesizes a friendly response.</p>
</blockquote>
<hr />
<h2 id="heading-5-environment-amp-permissions">5. Environment &amp; Permissions</h2>
<p>Regardless of which AWS MCP server you run, it needs AWS credentials with the right IAM permissions. For example:</p>
<ul>
<li><p><strong>Cost Analysis MCP server</strong> requires:</p>
<ul>
<li><p><code>ce:GetCostAndUsage</code></p>
</li>
<li><p><code>ce:GetDimensionValues</code></p>
</li>
<li><p><code>ce:GetTags</code></p>
</li>
<li><p>(You can bundle these in a managed policy called <code>CostAnalysisMCPPolicy</code>).</p>
</li>
</ul>
</li>
<li><p><strong>CloudFormation MCP server</strong> needs:</p>
<ul>
<li><code>cloudformation:CreateStack</code>, <code>DescribeStacks</code>, <code>UpdateStack</code>, <code>DeleteStack</code>, etc.</li>
</ul>
</li>
<li><p><strong>Lambda MCP server</strong> needs:</p>
<ul>
<li><code>lambda:ListFunctions</code>, <code>lambda:InvokeFunction</code>, <code>lambda:GetFunctionConfiguration</code>, etc.</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>Tip:</strong> When you launch via <code>uvx awslabs.&lt;server&gt;@latest</code>, you can inject:</p>
<pre><code class="lang-bash">--env AWS_PROFILE=my-profile \
--env AWS_REGION=us-east-1
</code></pre>
<p>as long as <code>~/.aws/credentials</code> or <code>AWS_ACCESS_KEY_ID</code>/<code>AWS_SECRET_ACCESS_KEY</code> are set accordingly.</p>
</blockquote>
<hr />
<h2 id="heading-6-summary-checklist">6. Summary Checklist</h2>
<ol>
<li><p><strong>Choose which AWS MCP server(s) you need.</strong></p>
<ul>
<li>See the “Available Servers” list on the AWS Labs MCP GitHub: <a target="_blank" href="https://github.com/awslabs/mcp">github.com</a></li>
</ul>
</li>
<li><p><strong>Install the</strong> <code>uvx</code> launcher tool.</p>
<ul>
<li><code>brew install uv</code> (macOS/Linux) or <code>pipx install uv</code> or <code>winget install astral-sh.uv</code> (Windows).</li>
</ul>
</li>
<li><p><strong>Launch the server(s) you need.</strong></p>
<pre><code class="lang-bash"> uvx awslabs.cost-analysis-mcp-server@latest \
   --env AWS_PROFILE=your-profile \
   --env AWS_REGION=us-west-2 \
   --env FASTMCP_LOG_LEVEL=INFO
</code></pre>
<ul>
<li>Each server will start on <code>localhost:8000</code>, <code>:8001</code>, etc. <a target="_blank" href="https://github.com/awslabs/mcp/blob/main/src/cfn-mcp-server/README.md">github.com</a></li>
</ul>
</li>
<li><p><strong>Point your MCP client (script or Bedrock agent) to the server’s HTTP endpoint.</strong></p>
<ul>
<li>Example using Node.js + Axios or Python + <code>mcp-client-for-testing</code>.</li>
</ul>
</li>
<li><p><strong>Verify IAM permissions</strong> for whichever AWS APIs the selected MCP server uses.</p>
<ul>
<li><p>Cost Analysis → <code>ce:GetCostAndUsage, GetDimensionValues, GetTags</code></p>
</li>
<li><p>CloudFormation → <code>cloudformation:*</code></p>
</li>
<li><p>Lambda → <code>lambda:*</code>, etc.</p>
</li>
</ul>
</li>
<li><p><strong>Interact!</strong></p>
<ul>
<li><p>Send JSON-RPC 2.0 requests like:</p>
<pre><code class="lang-json">  {
    <span class="hljs-attr">"jsonrpc"</span>:<span class="hljs-string">"2.0"</span>,
    <span class="hljs-attr">"id"</span>:<span class="hljs-string">"some-uuid"</span>,
    <span class="hljs-attr">"method"</span>:<span class="hljs-string">"GetCostAndUsage"</span>,
    <span class="hljs-attr">"params"</span>:{
      <span class="hljs-attr">"TimePeriod"</span>:{<span class="hljs-attr">"Start"</span>:<span class="hljs-string">"2025-05-01"</span>,<span class="hljs-attr">"End"</span>:<span class="hljs-string">"2025-05-31"</span>},
      <span class="hljs-attr">"Granularity"</span>:<span class="hljs-string">"MONTHLY"</span>,
      <span class="hljs-attr">"Metrics"</span>:[<span class="hljs-string">"BlendedCost"</span>]
    }
  }
</code></pre>
</li>
<li><p>Read the JSON response and surface it (or let your LLM/Bedrock Agent format a human-friendly answer).</p>
</li>
</ul>
</li>
</ol>
<hr />
<h3 id="heading-further-reading-amp-references">Further Reading &amp; References</h3>
<ul>
<li><p>AWS Labs MCP GitHub (full “Available Servers” list + individual READMEs):<br />  <a target="_blank" href="https://github.com/awslabs/mcp/tree/main/src">https://github.com/awslabs/mcp/tree/main/src</a> <a target="_blank" href="https://github.com/awslabs/mcp">github.comgithub.com</a></p>
</li>
<li><p>Installing <code>uvx</code>: Astral docs (Homebrew, pipx, winget) <a target="_blank" href="https://docs.astral.sh/uv/getting-started/installation/?utm_source=chatgpt.com">docs.astral.sh</a><a target="_blank" href="https://medium.com/%40richardhightower/anthropics-mcp-set-up-git-mcp-agentic-tooling-with-claude-desktop-beceb283a59c?utm_source=chatgpt.com">medium.com</a></p>
</li>
<li><p>MCP Client for Testing (Python example): <a target="_blank" href="https://pypi.org/project/mcp-client-for-testing/">https://pypi.org/project/mcp-client-for-testing/</a> <a target="_blank" href="https://pypi.org/project/mcp-client-for-testing/?utm_source=chatgpt.com">pypi.org</a></p>
</li>
<li><p>“Harness the power of MCP servers with Amazon Bedrock Agents”:<br />  <a target="_blank" href="https://aws.amazon.com/blogs/machine-learning/harness-the-power-of-mcp-servers-with-amazon-bedrock-agents/">https://aws.amazon.com/blogs/machine-learning/harness-the-power-of-mcp-servers-with-amazon-bedrock-agents/</a> <a target="_blank" href="https://aws.amazon.com/blogs/machine-learning/harness-the-power-of-mcp-servers-with-amazon-bedrock-agents/?utm_source=chatgpt.com">aws.amazon.com</a><a target="_blank" href="https://community.aws/content/2v8AETAkyvPp9RVKC4YChncaEbs/running-mcp-based-agents-clients-servers-on-aws?lang=en&amp;utm_source=chatgpt.com">community.aws</a></p>
</li>
</ul>
<p>With this setup, you can immediately <strong>use AWS’s expert-maintained MCP servers</strong> for cost analysis, CloudFormation, serverless, CDK, and more, no need to write or maintain your own server logic. Enjoy plugging your LLM or custom client directly into AWS best practices!</p>
]]></content:encoded></item></channel></rss>