0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 25%, 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
02Legibility
27.4 / 30
03Economics
20.0 / 20
04Discoverability
8.3 / 20
Highest-impact fix
Estimated gain +30 pointsAdd 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.
5 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 |
|---|---|---|
connect_db |
name_restates_behavior params_unexplained no_return_description |
Opens a connection to a MySQL server using the given host and user credentials, and selects the specified 'database' (the schema/database name to use once connected) as the active database. Returns a connection handle used by subsequent query/execute calls, or throws an error if authentication or connection fails. |
query |
name_restates_behavior no_return_description |
Runs a read-only SQL SELECT statement against the currently connected MySQL database, optionally binding values from the 'params' array to '?' placeholders in the SQL for safe parameterization. Returns the matched rows as an array of row objects (empty array if no rows match). |
execute |
no_return_description |
Runs a data-modifying SQL statement (INSERT, UPDATE, or DELETE) against the currently connected MySQL database, optionally binding values from the 'params' array to '?' placeholders in the SQL for safe parameterization. Returns execution metadata such as the number of affected rows and, for INSERT statements, the generated insert ID. |
list_tables |
name_restates_behavior no_return_description |
Queries the information schema of the currently connected MySQL database to enumerate its tables. Returns an array of table name strings; the array is empty if the database has no tables. |
describe_table |
params_unexplained no_return_description |
Runs a DESCRIBE query against the table named in the required 'table' parameter (the exact table name in the current database) to inspect its schema. Returns an array of column descriptors, each including the column name, data type, nullability, key type, and default value. |
Selection evidence
Confusable tool pairs.
1 pair where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
list_tables |
describe_table |
low | list_tables takes no arguments and returns all table names, while describe_table requires a specific table name to get its structure; a task like 'show me the tables' vs 'show me the table structure' is distinguishable enough that confusion is unlikely, though an ambiguous request like 'show me info about the database tables' could plausibly trigger either. |
Compare the field