aws athena mcp

Local 2025-08-31 23:27:00 0

Run SQL queries with AWS Athena to access data available from AWS Glue catalog.


smithery badge

A Model Context Protocol (MCP) server for running AWS Athena queries. This server enables AI assistants to execute SQL queries against your AWS Athena databases and retrieve results.

aws-athena-mcp MCP server

Usage

  1. Configure AWS credentials using one of the following methods:
  2. AWS CLI configuration
  3. Environment variables (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
  4. IAM role (if running on AWS)

  5. Add the server to your MCP configuration:

{
  "mcpServers": {
    "athena": {
      "command": "npx",
      "args": ["-y", "@lishenxydlgzs/aws-athena-mcp"],
      "env": {
        // Required
        "OUTPUT_S3_PATH": "s3://your-bucket/athena-results/",

        // Optional AWS configuration
        "AWS_REGION": "us-east-1",                    // Default: AWS CLI default region
        "AWS_PROFILE": "default",                     // Default: 'default' profile
        "AWS_ACCESS_KEY_ID": "",                      // Optional: AWS access key
        "AWS_SECRET_ACCESS_KEY": "",                  // Optional: AWS secret key
        "AWS_SESSION_TOKEN": "",                      // Optional: AWS session token

        // Optional server configuration
        "ATHENA_WORKGROUP": "default_workgroup",      // Optional: specify the Athena WorkGroup
        "QUERY_TIMEOUT_MS": "300000",                 // Default: 5 minutes (300000ms)
        "MAX_RETRIES": "100",                         // Default: 100 attempts
        "RETRY_DELAY_MS": "500"                       // Default: 500ms between retries
      }
    }
  }
}
  1. The server provides the following tools:

  2. run_query: Execute a SQL query using AWS Athena

  3. Parameters:
    • database: The Athena database to query
    • query: SQL query to execute
    • maxRows: Maximum number of rows to return (default: 1000, max: 10000)
  4. Returns:

    • If query completes within timeout: Full query results
    • If timeout reached: Only the queryExecutionId for later retrieval
  5. get_status: Check the status of a query execution

  6. Parameters:
    • queryExecutionId: The ID returned from run_query
  7. Returns:

    • state: Query state (QUEUED, RUNNING, SUCCEEDED, FAILED, or CANCELLED)
    • stateChangeReason: Reason for state change (if any)
    • submissionDateTime: When the query was submitted
    • completionDateTime: When the query completed (if finished)
    • statistics: Query execution statistics (if available)
  8. get_result: Retrieve results for a completed query

  9. Parameters:
    • queryExecutionId: The ID returned from run_query
    • maxRows: Maximum number of rows to return (default: 1000, max: 10000)
  10. Returns:

    • Full query results if the query has completed successfully
    • Error if query failed or is still running
  11. list_saved_queries: List all saved (named) queries in Athena.

  12. Returns:

  13. An array of saved queries with id, name, and optional description
  14. Queries are returned from the configured ATHENA_WORKGROUP and AWS_REGION

  15. run_saved_query: Run a previously saved query by its ID.

  16. Parameters:
  17. namedQueryId: ID of the saved query
  18. databaseOverride: Optional override of the saved query's default database
  19. maxRows: Maximum number of rows to return (default: 1000)
  20. timeoutMs: Timeout in milliseconds (default: 60000)
  21. Returns:
  22. Same behavior as run_query: full results or execution ID

Usage Examples

Show All Databases

Message to AI Assistant: List all databases in Athena

MCP parameter:

{
  "database": "default",
  "query": "SHOW DATABASES"
}

List Tables in a Database

Message to AI Assistant: Show me all tables in the default database

MCP parameter:

{
  "database": "default",
  "query": "SHOW TABLES"
}

Get Table Schema

Message to AI Assistant: What's the schema of the asin_sitebestimg table?

MCP parameter:

{
  "database": "default",
  "query": "DESCRIBE default.asin_sitebestimg"
}

Table Rows Preview

Message to AI Assistant: Show some rows from my_database.mytable

MCP parameter:

{
  "database": "my_database",
  "query": "SELECT * FROM my_table LIMIT 10",
  "maxRows": 10
}

Advanced Query with Filtering and Aggregation

Message to AI Assistant: Find the average price by category for in-stock products

MCP parameter:

{
  "database": "my_database",
  "query": "SELECT category, COUNT(*) as count, AVG(price) as avg_price FROM products WHERE in_stock = true GROUP BY category ORDER BY count DESC",
  "maxRows": 100
}

Checking Query Status

{
  "queryExecutionId": "12345-67890-abcdef"
}

Getting Results for a Completed Query

{
  "queryExecutionId": "12345-67890-abcdef",
  "maxRows": 10
}

Listing Saved Queries

{
  "name": "list_saved_queries",
  "arguments": {}
}

Running a Saved Query

{
  "name": "run_saved_query",
  "arguments": {
    "namedQueryId": "abcd-1234-efgh-5678",
    "maxRows": 100
  }
}

Requirements

  • Node.js >= 16
  • AWS credentials with appropriate Athena and S3 permissions
  • S3 bucket for query results
  • Named queries (optional) must exist in the specified ATHENA_WORKGROUP and AWS_REGION

License

MIT

Repository

GitHub Repository

[
  {
    "description": "Execute a SQL query using AWS Athena. Returns full results if query completes before timeout, otherwise returns queryExecutionId.",
    "inputSchema": {
      "properties": {
        "database": {
          "description": "The Athena database to query",
          "type": "string"
        },
        "maxRows": {
          "description": "Maximum number of rows to return (default: 1000)",
          "maximum": 10000,
          "minimum": 1,
          "type": "number"
        },
        "query": {
          "description": "SQL query to execute",
          "type": "string"
        },
        "timeoutMs": {
          "description": "Timeout in milliseconds (default: 60000)",
          "minimum": 1000,
          "type": "number"
        }
      },
      "required": [
        "database",
        "query"
      ],
      "type": "object"
    },
    "name": "run_query"
  },
  {
    "description": "Get results for a completed query. Returns error if query is still running.",
    "inputSchema": {
      "properties": {
        "maxRows": {
          "description": "Maximum number of rows to return (default: 1000)",
          "maximum": 10000,
          "minimum": 1,
          "type": "number"
        },
        "queryExecutionId": {
          "description": "The query execution ID",
          "type": "string"
        }
      },
      "required": [
        "queryExecutionId"
      ],
      "type": "object"
    },
    "name": "get_result"
  },
  {
    "description": "Get the current status of a query execution",
    "inputSchema": {
      "properties": {
        "queryExecutionId": {
          "description": "The query execution ID",
          "type": "string"
        }
      },
      "required": [
        "queryExecutionId"
      ],
      "type": "object"
    },
    "name": "get_status"
  }
]