awslabs.dynamodb-mcp-server@2.1.10
VERIFIED· install onlyPublisher claims: "The official MCP Server for interacting with AWS DynamoDB" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Verified here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYMYSQL_SECRET_ARNConfiguration, not credentials: AWS_DEFAULT_REGION, AWS_REGION, JAVA_HOME, MYSQL_CLUSTER_ARN, MYSQL_DATABASE, MYSQL_HOSTNAME, MYSQL_MAX_QUERY_RESULTS, MYSQL_PORT- Where it talks to
- no vendor host named in the codeAlso amazon.com, cloudfront.net — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names amazon.com, cloudfront.net as well as its own vendor. The guard injects AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, MYSQL_SECRET_ARN only into requests to the host you bind (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-09 and scored it 80/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
chmod o+x /rootFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.- Path traversal attempts (e.g., ../../../../etc/passwd) are blockedFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- `docs: update AGENTS.md with new tool descriptions`Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.DUMMY_ACCESS_KEY = 'AKIAIOSFODNN7EXAMPLE' # pragma: allowlist secretFix: Never read or enumerate credential locations; accept a documented environment variable instead.subprocess.run( # nosec B603, B607 - user local env, hardcoded cmd, no shell, timeoutFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.run(cmd, cwd=project_root, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(cmd, cwd=project_root)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.with pytest.raises(CdkGeneratorError, match='npx command not found'):Fix: Pin versions and sources; vendor anything fetched at install time.plugin.parse_results_from_file('/tmp/safe/../../../etc/passwd')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'file:///etc/passwd',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.validate_path_within_directory('/etc/passwd', tmpdir, 'test file')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.plugin, 'test_db', 500, '/etc/passwd', tmpdir, 'mysql'Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.generate(schema_path='../../../../etc/passwd', validate_only=True)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."""Test _run_cdk_init when npx is not found."""Fix: Pin versions and sources; vendor anything fetched at install time.validate_path_within_directory('../../../etc/passwd', tmpdir, 'test file')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return subprocess.run(cmd, cwd=get_project_root(), capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.plugin.parse_results_from_file('../../../etc/passwd')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.mock_run.side_effect = FileNotFoundError('npx not found')Fix: Pin versions and sources; vendor anything fetched at install time.pytest.skip('npx or npm not found')Fix: Pin versions and sources; vendor anything fetched at install time.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(cmd, cwd=project_root, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.'npx command not found. Install Node.js and npm, then try again.'Fix: Pin versions and sources; vendor anything fetched at install time.['bash', '-c', 'rm -rf /'],Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.validate_path_within_directory('/etc/passwd', tmpdir, 'custom output file')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.LanguageConfigLoader.load('../../../etc/passwd')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.install_result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.process = subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.pytest.skip('npx or npm not found - skipping synthesis test')Fix: Pin versions and sources; vendor anything fetched at install time.MockMember('../../../etc/passwd'),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.install_result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.cleanup_result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.['bash', '-c', 'rm -rf /'],Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.aws_access_key_id='AKIAIOSFODNN7EXAMPLE', # pragma: allowlist secretFix: Never read or enumerate credential locations; accept a documented environment variable instead.analyzer_utils.resolve_and_validate_path('/etc/passwd', tmpdir, 'test file')Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.deploy_result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.MockMember('/etc/passwd'),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.mock_client.meta.endpoint_url = 'http://192.168.1.100:8000'Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for awslabs.dynamodb-mcp-server@2.1.10 as of 5d ago. This is the package itself, not its dependencies.