An AWS Labs Model Context Protocol (MCP) server for Aurora DSQL
Project description
AWS Labs Aurora DSQL MCP Server
An AWS Labs Model Context Protocol (MCP) server for Aurora DSQL
Features
- Converting human-readable questions and commands into structured Postgres-compatible SQL queries and executing them against the configured Aurora DSQL database.
- Read-only by default, transactions enabled with
--allow-writes - Connection reuse between requests for improved performance
- Built-in access to Aurora DSQL documentation, search, and best practice recommendations
Available Tools
Database Operations
- readonly_query - Execute read-only SQL queries against your DSQL cluster
- transact - Execute SQL statements in a transaction
- In read-only mode: Supports read operations with transactional consistency
- With
--allow-writes: Supports all write operations too
- get_schema - Retrieve table schema information
Documentation and Recommendations
- dsql_search_documentation - Search Aurora DSQL documentation
- Parameters:
search_phrase(required),limit(optional)
- Parameters:
- dsql_read_documentation - Read specific DSQL documentation pages
- Parameters:
url(required),start_index(optional),max_length(optional)
- Parameters:
- dsql_recommend - Get recommendations for DSQL best practices
- Parameters:
url(required)
- Parameters:
Prerequisites
- An AWS account with an Aurora DSQL Cluster
- This MCP server can only be run locally on the same host as your LLM client.
- Set up AWS credentials with access to AWS services
- You need an AWS account with appropriate permissions
- Configure AWS credentials with
aws configureor environment variables
Installation
| Kiro | Cursor | VS Code |
|---|---|---|
Using uv
- Install
uvfrom Astral or the GitHub README - Install Python using
uv python install 3.10
Configure the MCP server in your MCP client configuration (e.g., for Kiro, edit ~/.kiro/settings/mcp.json):
{
"mcpServers": {
"awslabs.aurora-dsql-mcp-server": {
"command": "uvx",
"args": [
"awslabs.aurora-dsql-mcp-server@latest",
"--cluster_endpoint",
"[your dsql cluster endpoint]",
"--region",
"[your dsql cluster region, e.g. us-east-1]",
"--database_user",
"[your dsql username]",
"--profile",
"default"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
},
"disabled": false,
"autoApprove": []
}
}
}
Windows Installation
For Windows users, the MCP server configuration format is slightly different:
{
"mcpServers": {
"awslabs.aurora-dsql-mcp-server": {
"disabled": false,
"timeout": 60,
"type": "stdio",
"command": "uv",
"args": [
"tool",
"run",
"--from",
"awslabs.aurora-dsql-mcp-server@latest",
"awslabs.aurora-dsql-mcp-server.exe"
],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR",
"AWS_PROFILE": "your-aws-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
Using Docker
- 'git clone https://github.com/awslabs/mcp.git'
- Go to sub-directory 'src/aurora-dsql-mcp-server/'
- Run 'docker build -t awslabs/aurora-dsql-mcp-server:latest .'
- Create a env file with temporary credentials:
Either manually:
# fictitious `.env` file with AWS temporary credentials
AWS_ACCESS_KEY_ID=<from the profile you set up>
AWS_SECRET_ACCESS_KEY=<from the profile you set up>
AWS_SESSION_TOKEN=<from the profile you set up>
Or using aws configure:
aws configure export-credentials --profile your-profile-name --format env > temp_aws_credentials.env | sed 's/^export //' > temp_aws_credentials.env
{
"mcpServers": {
"awslabs.aurora-dsql-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--env-file",
"/full/path/to/file/above/.env",
"awslabs/aurora-dsql-mcp-server:latest",
"--cluster_endpoint",
"[your data]",
"--database_user",
"[your data]",
"--region",
"[your data]"
]
}
}
}
Server Configuration options
--allow-writes
By default, the DSQL MCP server operates in read-only mode. In this mode:
- readonly_query: Executes single read-only queries
- transact: Executes read-only transactions with point-in-time consistency
- Useful for multiple queries that need to see data at the same point in time
- All statements are validated to ensure they are read-only operations
- Write operations (INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, etc.) are rejected
To enable write operations, pass the --allow-writes parameter. In read-write mode:
- readonly_query: Same behavior (read-only queries)
- transact: Supports all DDL and DML operations (CREATE, INSERT, UPDATE, DELETE, etc.)
We recommend using least-privilege access when connecting to DSQL. For example, users should use a role that is read-only when possible. The read-only mode provides best-effort client-side validation to reject mutations.
--cluster_endpoint
This is mandatory parameter to specify the cluster to connect to. This should be the full endpoint of your cluster, e.g., 01abc2ldefg3hijklmnopqurstu.dsql.us-east-1.on.aws
--database_user
This is a mandatory parameter to specify the user to connect as. For example
admin, or my_user. Note that the AWS credentials you are using must have
permission to login as that user. For more information on setting up and using
database roles in DSQL, see Using database roles with IAM roles.
--profile
You can specify the aws profile to use for your credentials. Note that this is not supported for docker installation.
Using the AWS_PROFILE environment variable in your MCP configuration is also
supported:
"env": {
"AWS_PROFILE": "your-aws-profile"
}
If neither is provided, the MCP server defaults to using the "default" profile in your AWS configuration file.
--region
This is a mandatory parameter to specify the region of your DSQL database.
--knowledge-server
Optional parameter to specify the remote MCP server endpoint for DSQL knowledge tools (documentation search, reading, and recommendations). By default it is pre-configured.
Example:
--knowledge-server https://custom-knowledge-server.example.com
Note: For security, only use trusted knowledge server endpoints. The server should be an HTTPS endpoint.
--knowledge-timeout
Optional parameter to specify the timeout in seconds for requests to the knowledge server.
Default: 30.0
Example:
--knowledge-timeout 60.0
Increase this value if you experience timeouts when accessing documentation on slow networks.
Development and Testing
Running Tests
This project includes comprehensive tests to validate the readonly enforcement mechanisms. To run the tests:
# Install dependencies and run tests
uv run pytest tests/test_readonly_enforcement.py -v
# Run all tests
uv run pytest -v
# Run tests with coverage
uv run pytest --cov=awslabs.aurora_dsql_mcp_server tests/ -v
Local Docker Testing
To test the MCP server locally using Docker:
-
Build the Docker image:
cd src/aurora-dsql-mcp-server docker build -t awslabs/aurora-dsql-mcp-server:latest .
-
Create AWS credentials file:
Option A - Manual creation:
# Create .env file with your AWS credentials cat > .env << EOF AWS_ACCESS_KEY_ID=your_access_key_here AWS_SECRET_ACCESS_KEY=your_secret_key_here AWS_SESSION_TOKEN=your_session_token_here EOF
Option B - Export from AWS CLI:
aws configure export-credentials --profile your-profile-name --format env > temp_aws_credentials.env sed 's/^export //' temp_aws_credentials.env > .env rm temp_aws_credentials.env
-
Test the container directly:
docker run -i --rm \ --env-file .env \ awslabs/aurora-dsql-mcp-server:latest \ --cluster_endpoint "your-dsql-cluster-endpoint" \ --database_user "your-username" \ --region "us-east-1"
-
Test with write operations enabled:
docker run -i --rm \ --env-file .env \ awslabs/aurora-dsql-mcp-server:latest \ --cluster_endpoint "your-dsql-cluster-endpoint" \ --database_user "your-username" \ --region "us-east-1" \ --allow-writes
Note: Replace the placeholder values with your actual DSQL cluster endpoint, username, and region.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file awslabs_aurora_dsql_mcp_server-1.0.12.tar.gz.
File metadata
- Download URL: awslabs_aurora_dsql_mcp_server-1.0.12.tar.gz
- Upload date:
- Size: 133.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c041b0f899c45c3274fad85b4c27fad87e6613b866bdcd075acd24c228e115f4
|
|
| MD5 |
a9b06cd90b470dfb334d38a04760c704
|
|
| BLAKE2b-256 |
ea38d20053acc0cb7ec100f023c127d40b14f504ce3cdb007a7491d9a0091e34
|
Provenance
The following attestation bundles were made for awslabs_aurora_dsql_mcp_server-1.0.12.tar.gz:
Publisher:
release.yml on awslabs/mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
awslabs_aurora_dsql_mcp_server-1.0.12.tar.gz -
Subject digest:
c041b0f899c45c3274fad85b4c27fad87e6613b866bdcd075acd24c228e115f4 - Sigstore transparency entry: 807432291
- Sigstore integration time:
-
Permalink:
awslabs/mcp@4ab39209ea864ad7b24c47a74b2ae5011b4c58c4 -
Branch / Tag:
refs/tags/2026.01.20260109012952 - Owner: https://github.com/awslabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4ab39209ea864ad7b24c47a74b2ae5011b4c58c4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file awslabs_aurora_dsql_mcp_server-1.0.12-py3-none-any.whl.
File metadata
- Download URL: awslabs_aurora_dsql_mcp_server-1.0.12-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4471ab8153c51f511ee0d286687f26184efea85b5afafcd1e5407b69bae7ef6
|
|
| MD5 |
dca47a3f43ccce3518026d10138bfc36
|
|
| BLAKE2b-256 |
f6a45ef39bd485fab37b7893a431e738d2fb30888642e626cb49bf2722fe507b
|
Provenance
The following attestation bundles were made for awslabs_aurora_dsql_mcp_server-1.0.12-py3-none-any.whl:
Publisher:
release.yml on awslabs/mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
awslabs_aurora_dsql_mcp_server-1.0.12-py3-none-any.whl -
Subject digest:
c4471ab8153c51f511ee0d286687f26184efea85b5afafcd1e5407b69bae7ef6 - Sigstore transparency entry: 807432342
- Sigstore integration time:
-
Permalink:
awslabs/mcp@4ab39209ea864ad7b24c47a74b2ae5011b4c58c4 -
Branch / Tag:
refs/tags/2026.01.20260109012952 - Owner: https://github.com/awslabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4ab39209ea864ad7b24c47a74b2ae5011b4c58c4 -
Trigger Event:
push
-
Statement type: