Public leaderboard

Public assessment

ofershap/mcp-server-s3 (mcp-server-s3)

mcp-server-s3 · v1.0.0 · scanned

What changed in the harness

Selection accuracy 98→95, token cost up 18%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

24.5 / 30

24.5 out of 30
03Economics

20.0 / 20

20.0 out of 20
04Discoverability

10.4 / 20

10.4 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

7 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
list_buckets
name_restates_behavior no_return_description
Return the names of every S3 bucket available in your AWS account. Use this to discover which buckets exist and to confirm the correct bucket name before listing objects or writing data.
list_objects
name_restates_behavior params_unexplained no_return_description
Return up to maxKeys object keys (default 100) stored in the named S3 bucket, optionally limited to keys starting with the given prefix (e.g. 'uploads/'). Use this to discover stored files before reading or deleting them.
get_object
params_unexplained no_return_description
Download the object stored at the given key in the named S3 bucket and return its contents as a text string. Use this to read file content directly as an alternative to a presigned URL.
put_object
params_unexplained no_return_description
Write the provided content to the S3 object at the given key in the named S3 bucket, setting the Content-Type header to the supplied content type (default text/plain). Returns the result of the upload, such as the ETag, or an error if the write fails.
delete_object
name_restates_behavior params_unexplained no_return_description
Permanently remove the S3 object stored at the given key in the named bucket and return a success confirmation, or an error if the object does not exist. Use this to clean up storage after processing.
presigned_url
name_restates_behavior params_unexplained no_return_description
Return an HTTPS URL that grants temporary access to the S3 object at the given key in the named bucket, expiring after expiresIn seconds (default 3600). Use this to share private objects with others without giving them AWS credentials.
bucket_info
params_unexplained no_return_description
Return whether the named S3 bucket exists and basic information about it, such as its region and creation date. Use this to verify a bucket exists before performing operations on it.

Selection evidence

Confusable tool pairs.

3 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
list_buckets list_objects medium A task like 'list what I have in S3' or 'show my S3 contents' is ambiguous: list_buckets enumerates account-level buckets while list_objects enumerates keys inside a specific bucket, and both share the 'list'/'s3' tokens.
list_buckets bucket_info medium Tasks phrased as 'check my bucket' or 'get info on my buckets' map ambiguously: list_buckets returns all buckets with no inputs, while bucket_info checks existence/details of a single named bucket.
list_objects get_object medium A task like 'get/read the objects in bucket X' is ambiguous: get_object reads one object's text by key, while list_objects returns the list of keys in the bucket; the 'get' verb and shared 'object' token can mislead the agent.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard