Skip to main content
The AWS MCP Server is a remote MCP server that AWS runs. Coral can connect to it in two ways:
  • OAuth. The AWS provider in Coral’s catalog signs each member in with AWS. Use it when each member has an AWS sign-in. AWS keeps a sign-in for at most 12 hours. After that, you reconnect the account in Coral.
  • IAM. Coral calls AWS with one IAM role. Use it when you want a fixed identity with its own IAM policies, or access that does not need a new sign-in every 12 hours. This guide covers this option.
With IAM, each request to the AWS MCP Server is signed with AWS Signature Version 4 (SigV4). You’ll need a small bridge next to Coral so requests going to the AWS MCP Server are signed with SigV4. The bridge uses two existing tools in one container.
  • MCP Proxy for AWS signs each request with the bridge’s AWS credentials and sends it to the AWS MCP Server.
  • Supergateway runs the proxy, serves it as a Streamable HTTP endpoint and checks an API key on each request.
Every call through this provider uses the bridge’s IAM role, whoever the Coral member is. Give that role only the AWS permissions you want every member of the provider to have, and use permissions to decide who can call which tools.

Before you start

  • A self-hosted Coral deployment, version 1.6.1 or later. This guide covers Docker Compose and Kubernetes.
  • An AWS Region for the endpoint. The examples use https://aws-mcp.us-east-1.api.aws/mcp. AWS lists the other Regions.
  • A place on AWS to run the bridge. The Docker Compose example gets the bridge’s IAM role from an Amazon EC2 instance. The Kubernetes example gets it from Amazon EKS. This guide does not cover other platforms. On Amazon ECS, set the role as the task role of the bridge’s task. Every container in that task can use the role. Outside AWS, use IAM Roles Anywhere.
  • Permission to create an IAM role in the AWS account that the provider reads.

Set up the bridge

1

Create the IAM role

Create an IAM role for the bridge. You give the role to the bridge in step 3.The AWS MCP Server needs no permissions of its own. Each tool call reaches the AWS service with the bridge’s role, and that service checks the role’s IAM policies. Attach the policies for the access you want. For read-only access, the AWS managed policy ReadOnlyAccess is a good start:
AWS adds the condition key aws:ViaAWSMCPService to each request that the AWS MCP Server makes. To give the role different permissions through MCP than through direct API calls, see the AWS policy examples.
2

Generate an API key for the bridge

Coral sends this key to the bridge as a bearer token. The bridge refuses requests without it.
3

Run the bridge

Add this service to the compose file that runs Coral.
Set AWS_MCP_API_KEY to the key from the previous step, in your shell or in the .env file next to the compose file.To give the role to the bridge, attach the role to the EC2 instance that runs the compose project. Set the instance metadata hop limit to 2 so that the container can reach the instance metadata service. Every container on the instance can then use the role.The bridge’s MCP server URL is http://aws-mcp:8000/mcp.
The proxy takes these options:The examples set --logLevel none. Without it, Supergateway writes each MCP request and result to the container’s logs, which puts AWS data there. The option also hides the proxy’s error messages. Remove it while you debug the bridge.The 4.2.2-uvx and 1.8.0 versions are examples. Check Supergateway’s tags and the proxy’s releases for newer ones.
4

Let Coral reach the bridge

With [auth] configured, Coral denies provider calls to private network addresses. The bridge has a private address and serves plain HTTP, so add the [outbound] policy to Coral’s configuration. In the Docker Compose guide, that is the CORAL_CONFIG value in the compose file. In the Kubernetes guide, it is the config.toml key of the Coral ConfigMap.
Then recreate the Coral container, or restart the Coral Deployment.
Over plain HTTP, the API key is not encrypted between Coral and the bridge. Use it only where you trust the network between them, such as the compose project’s own network. The policy also applies to every provider: a workspace owner can then add a provider at any private address that Coral can reach. To avoid both, serve the bridge over TLS, keep the https policy and use the bridge’s https:// URL in the next step.
5

Add the provider to Coral

  1. Go to your workspace’s Providers page.
  2. Click Add provider, then Add custom.
  3. Enter the bridge’s MCP server URL, then click Connect.
  4. Enter a display name and a namespace, such as AWS and aws. You cannot change the namespace later.
  5. For Sign-in, choose Bearer token. Click Next.
  6. Click Enter a token to read the tools. Enter the API key from step 2, then click List tools.
  7. Click Next. Under One shared account, choose Use this account.
  8. Click Add provider.

Check the connection

Open the provider in Coral. It lists the AWS MCP Server’s tools, such as awsRunScript and awsSearchDocumentation. Then ask your agent which AWS account it uses through Coral. The answer names the bridge’s IAM role. awsRunScript and awsGetPresignedUrl are not read-only tools, so each call waits for your approval. To change that, set each tool’s policy on the provider’s page. See permissions.

Troubleshooting

With --logLevel none, the bridge logs nothing. Remove the option to see the errors in the bridge’s logs. For other errors, see AWS’s troubleshooting table.