01Safety
0.0 / 30
What changed in the harness
Selection accuracy 91→100, token cost up 8%, unconfirmed writes 0%→0%.
Category breakdown
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
0.0 / 30
25.3 / 30
20.0 / 20
8.6 / 20
Highest-impact fix
Estimated gain +30 pointsExpose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
8 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 |
|---|---|---|
seameet_get_recording |
no_return_description |
Get one recording's metadata plus a chosen artifact. Returns the recording's metadata together with the requested artifact: "summary" (Markdown), "transcription" (speaker-labeled), "chapters", "action-items", "key-decisions", or "all" for every section. Content may be capped for free-plan owners (capped=true). |
seameet_get_media_url |
params_unexplained no_return_description |
Get a fresh presigned URL (valid 15 minutes) that can be used to stream or download a recording's media file. Returns the presigned URL for the given recording. assetId: the recording's asset id from seameet_list_recent_recordings. |
seameet_get_usage |
no_return_description |
Report storage usage vs quota for the authenticated account. Returns the account's current storage usage and its quota limit so you can see how much headroom remains. |
seameet_list_webhooks |
no_return_description |
List the account's webhook endpoints. Returns each endpoint's id, URL, events, active state, signing secret, and delivery health (failure_count, last_status, active). Use the ids with seameet_update_webhook / seameet_delete_webhook. |
seameet_update_webhook |
params_unexplained no_return_description |
Update a webhook endpoint: re-enable one auto-disabled by failures (active:true, which also resets the failure counter) and/or change its url/events. events: which event types to receive — "recording.synced" and/or "ai.ready". Returns the updated endpoint configuration. Requires a write-scoped key. |
seameet_delete_webhook |
no_return_description |
Delete a webhook endpoint by its id so SeaMeet stops delivering events to it. Returns confirmation that the endpoint was removed. Requires a write-scoped key. |
seameet_status |
no_return_description |
Report how this SeaMeet MCP is connected. Returns the current mode(s): DESKTOP mode (the desktop app is running — full record/screenshot/transcript tools) and/or CLOUD mode (authorized access to your synced library + webhooks), plus how to enable the other. Call this to see the current mode and how to enable the other. |
seameet_logout |
no_return_description |
Disconnect CLOUD mode: forget the cached cloud API key (~/.seameet/credentials.json) and cancel any pending device authorization, so the next cloud tool call re-authorizes (e.g. to switch accounts). Returns confirmation that cloud access was disconnected. Does not touch DESKTOP mode; the key itself stays valid until you revoke it under API keys at https://app.seameet.ai/account. |
Selection evidence
2 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
seameet_get_recording |
seameet_get_media_url |
medium | Both take the same assetId and both describe 'getting' something about a recording. A task like 'get the recording for this meeting' is ambiguous: it could mean the transcript/summary content (seameet_get_recording) or the downloadable/streamable media file (seameet_get_media_url), so an agent could select the wrong one without disambiguating. |
seameet_list_recent_recordings |
seameet_get_recording |
medium | Phrasings like 'get me my recordings' or 'show me the latest recordings' are ambiguous between enumeration (list_recent_recordings, returns compact entries) and fetching one recording's content (get_recording, requires an assetId from list). Without an assetId in hand, an agent may call get_recording directly and fail, or pick the wrong tool for a content-extraction request. |
Compare the field