DynamoDB Read-Only MCP
This DynamoDB Read-Only MCP server enables LLMs like Claude to query AWS DynamoDB data using natural language requests. You can:
Table Management:
List all available DynamoDB tables (
list-tables)Retrieve detailed information about a specific table (
describe-table)
Data Access:
Scan all or part of a table's data with filtering options (
scan-table)Query data matching specific conditions, with support for indexes (
query-table,paginate-query-table)Retrieve a specific item by key (
get-item)Count items in a table, with optional filtering (
count-items)
Resources:
Access metadata for all tables (
dynamodb-tables-info)Retrieve schema information for a specific table (
dynamodb-table-schema)
Assistance:
Get help with writing DynamoDB queries (
dynamodb-query-help)
Uses environment variables for AWS credential configuration, allowing secure connection to DynamoDB services without hardcoding sensitive information.
Hosts the source code repository, providing version control and enabling users to clone, contribute to, or customize the DynamoDB MCP implementation.
Supports configuration specifically for macOS systems, providing platform-specific file paths for Claude Desktop integration.
Distributes the MCP server through npm, enabling easy installation and execution of the DynamoDB connection service.
Leverages Zod library for parameter validation when processing requests to DynamoDB, ensuring properly formatted queries and parameters.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DynamoDB Read-Only MCP show me the last 10 orders from the Orders table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DynamoDB Read-Only MCP
A server that utilizes the Model Context Protocol (MCP) to query AWS DynamoDB databases. This server allows LLMs like Claude to query DynamoDB data through natural language requests.
Features
This MCP server provides the following features:
Table Management Tools:
list-tables: View a list of all DynamoDB tablesdescribe-table: View detailed information about a specific table
Data Query Tools:
scan-table: Scan all or part of a table's dataquery-table: Search for data that matches specific conditions in a tablepaginate-query-table: Retrieve data across multiple pages that matches specific conditionsget-item: Retrieve an item with a specific keycount-items: Calculate the number of items in a table
Resources:
dynamodb-tables-info: A resource that provides metadata for all tablesdynamodb-table-schema: A resource that provides schema information for a specific table
Prompts:
dynamodb-query-help: A help prompt for writing DynamoDB queries
Related MCP server: Azure Cosmos DB MCP Server
Installation and Execution
You can run it without installation using the Run with NPX method below.
Installing via Smithery
To install DynamoDB Read-Only Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @jjikky/dynamo-readonly-mcp --client claudeInstallation
Clone the repository:
git clone https://github.com/jjikky/dynamo-readonly-mcp.git cd dynamo-readonly-mcpInstall the required packages:
npm installCreate a
.envfile and set up your AWS credentials:AWS_ACCESS_KEY_ID=your_access_key AWS_SECRET_ACCESS_KEY=your_secret_key AWS_REGION=your_region
Build and Run
npm run build
npm startConnect to Claude Desktop
To use this MCP server with Claude Desktop, you need to modify the Claude Desktop configuration file.
Open the Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the server configuration as follows:
{ "mcpServers": { "dynamodb-readonly": { "command": "node", "args": ["/absolute-path/dynamo-readonly-mcp/dist/index.js"], "env": { "AWS_ACCESS_KEY_ID": "your_access_key", "AWS_SECRET_ACCESS_KEY": "your_secret_key", "AWS_REGION": "your_region" } } } }Restart Claude Desktop.
Run with NPX
You can also run this server using npx without a global installation:
{
"mcpServers": {
"dynamodb-readonly": {
"command": "npx",
"args": ["-y", "dynamo-readonly-mcp"],
"env": {
"AWS_ACCESS_KEY_ID": "your_access_key",
"AWS_SECRET_ACCESS_KEY": "your_secret_key",
"AWS_REGION": "your_region"
}
}
}
}Usage Examples
You can ask Claude questions like:
"Can you tell me what tables are in DynamoDB?"
"Explain the structure of the Users table"
"Find the number of users in the 'Users' table where groupId is '0lxp4paxk7'"
Architecture
This MCP server consists of the following layered structure:
Client Interface (Claude Desktop) - Interaction between user and LLM
MCP Protocol Layer - Provides standardized message exchange method
DynamoDB Server - Implements functions that interact with DynamoDB
AWS SDK - Communicates with AWS DynamoDB service
Key Operation Mechanisms
1. Initialization and Connection
When the server starts, the following process occurs:
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('DynamoDB read-only MCP server is running...');
}StdioServerTransportsets up a communication channel through standard input/output.server.connect(transport)connects to Claude Desktop through the MCP protocol.During connection, the server sends information about supported tools, resources, and prompts to the client.
2. Tool Request Processing
When a user asks Claude something like "Show me the list of DynamoDB tables":
Claude analyzes this request and calls the
list-tablestool.This request is sent to the server through the MCP protocol.
The server executes the corresponding tool handler:
server.tool('list-tables', 'Gets a list of all DynamoDB tables', {}, async () => {
try {
const tables = await listTables();
return {
content: [{ type: 'text', text: JSON.stringify(tables, null, 2) }],
};
} catch (error) {
return { isError: true, content: [{ type: 'text', text: `Error: ${error.message}` }] };
}
});The result is returned to Claude through the MCP protocol.
Claude processes this result into natural language and presents it to the user.
3. Specific Parameter Handling
When a user requests "Tell me the structure of the Users table":
Claude determines that this request should use the
describe-tabletool.Claude configures the parameter as
{ tableName: "Users" }.This information is sent to the MCP server:
server.tool(
'describe-table',
'Gets detailed information about a DynamoDB table',
{
tableName: z.string().describe('Name of the table to get detailed information for'),
},
async ({ tableName }) => {
// Query table information using the tableName parameter
const tableInfo = await describeTable(tableName);
// Return results
}
);Here, z.string() uses the Zod library to validate parameters.
4. Resource Handling
Resources are another MCP feature that provides read-only data:
server.resource('dynamodb-tables-info', 'DynamoDB table information', async () => {
// Create and return resource data
const tables = await listTables();
const tablesInfo = await Promise.all(/* Query table information */);
return {
contents: [
{
uri: 'dynamodb://tables-info',
text: JSON.stringify(tablesInfo, null, 2),
mimeType: 'application/json',
},
],
};
});Claude accesses resources and uses them as context information.
5. Prompt Handling
The MCP server can provide prompt templates for specific tasks:
server.prompt(
'dynamodb-query-help',
'A prompt that helps write DynamoDB queries',
{
tableName: z.string().describe('Table name to query'),
queryType: z.enum(['basic', 'advanced']).default('basic'),
},
async ({ tableName, queryType }) => {
// Generate prompt content
return {
messages: [
{
role: 'user',
content: { type: 'text', text: helpContent },
},
],
};
}
);This prompt is used when a user requests "Show me how to write queries for the Users table."
Data Flow Summary
User makes a request to Claude in natural language
Claude analyzes the request and selects the appropriate MCP tool/resource/prompt
MCP client sends the request to the server in a standardized format
Server processes the request and calls the AWS DynamoDB API
DynamoDB returns results
Server converts results to MCP format and sends them to the client
Claude processes the results into natural language and presents them to the user
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
7 toolscount-itemsB
Count items in a DynamoDB table
Inputs: tableName (required), expressionAttributeValues, filterExpression.
describe-tableC
Get detailed information about a DynamoDB table
Inputs: tableName (required).
get-itemC
Get an item from a DynamoDB table based on a specific key
Inputs: key (required), tableName (required).
list-tablesB
Get a list of all DynamoDB tables
Inputs: no named parameters.
paginate-query-tableC
Paginate query results
Inputs: expressionAttributeValues (required), keyConditionExpression (required), tableName (required), projectionExpression.
query-tableC
Query items from a DynamoDB table based on conditions
Inputs: expressionAttributeValues (required), keyConditionExpression (required), tableName (required), filterExpression, +3 more.
scan-tableC
Scan items from a DynamoDB table
Inputs: tableName (required), expressionAttributeValues, filterExpression, limit, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Every tool has a clearly distinct purpose with no ambiguity: count-items focuses on counting, describe-table on metadata, get-item on single retrieval, list-tables on table enumeration, paginate-query-table on pagination, query-table on conditional queries, and scan-table on full scans. The descriptions clearly differentiate each tool's function, making misselection unlikely.
All tool names follow a consistent verb_noun pattern with hyphens (e.g., count-items, describe-table, get-item). There are no deviations in style or convention, making the naming predictable and easy to understand across the entire set.
With 7 tools, the count is well-scoped for a read-only DynamoDB server, covering essential operations like listing, describing, retrieving, querying, scanning, and counting. Each tool earns its place without redundancy, fitting within the typical 3-15 range for focused server purposes.
The tool set provides comprehensive read-only coverage for DynamoDB, including table listing, metadata retrieval, item access, queries, scans, and pagination. A minor gap exists in not supporting batch operations like batch-get-item, but agents can work around this with existing tools, and the core read workflows are well-covered.
Maintenance
Related MCP Connectors
Query, explore, and manage your databases through natural conversation.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA server that enables interaction with PostgreSQL, MySQL, MariaDB, or SQLite databases through Claude Desktop using natural language queries.1-
- AlicenseBqualityDmaintenanceA server that enables LLMs like Claude to interact with Azure Cosmos DB databases through natural language queries, acting as a translator between AI assistants and database systems.43MIT
- AlicenseCqualityBmaintenanceA server that enables LLMs (like Claude and VSCode Copilot) to interact with Azure Cosmos DB data through natural language queries, acting as a translator between AI assistants and your database.324 npm3MIT
- AlicenseNot gradedqualityDmaintenanceThis server provides database access capabilities to Claude, supporting SQLite, SQL Server, PostgreSQL, and MySQL databases.782 npmMIT