0.0 / 30
Public leaderboard
Public assessment
VeriTeknik/pluggedin-mcp-proxy (@pluggedin/pluggedin-mcp-proxy)
What changed in the harness
Selection accuracy 96→98, token cost up 2%, 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
22.4 / 30
03Economics
16.0 / 20
04Discoverability
13.9 / 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.
16 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 |
|---|---|---|
pluggedin_setup |
no_return_description |
Get started with Plugged.in MCP: returns setup instructions and API key configuration text for the requested topic (no API key required). |
pluggedin_discover_tools |
no_return_description |
Triggers discovery of tools, resources, and templates for configured MCP servers in the Pluggedin App. Returns a status/result summary of the discovery run (e.g., number of servers/tools discovered), optionally scoped to a single server via server_uuid. |
pluggedin_create_document |
no_return_description |
Create and save an AI-generated document to the user's library with full metadata tracking (requires API key). Returns the created document's ID and stored metadata. |
pluggedin_list_documents |
no_return_description |
List documents from the user's library with optional filtering, sorting, and pagination (requires API key). Returns an array of matching document summaries plus pagination info. |
pluggedin_get_document |
no_return_description |
Retrieve a specific document by ID (use after pluggedin_search_documents). Returns the document's metadata, and its full content and/or version history when includeContent or includeVersions is set to true. |
pluggedin_update_document |
no_return_description |
Update or append to an existing AI-generated document with version tracking (requires API key). Returns the updated document's metadata and new version info. |
pluggedin_mark_notification_done |
name_restates_behavior no_return_description |
Mark a notification as completed/read so it no longer appears in unread notification lists. Returns the updated notification's status. |
pluggedin_delete_notification |
no_return_description |
Permanently delete a notification from the Plugged.in system by ID. Returns a confirmation of deletion. |
pluggedin_clipboard_set |
no_return_description |
Set a clipboard entry by name (semantic key, upserted) or index (array-like, fails if index already exists), up to 2MB per entry. Returns the stored entry's key/index and metadata. |
pluggedin_clipboard_get |
no_return_description |
Get clipboard entries: a single entry when name or idx is specified, or a paginated list of all entries when both are omitted. Returns the matching entry value(s) with metadata. |
pluggedin_clipboard_delete |
no_return_description |
Delete clipboard entries by name, by index, or all entries at once when clearAll is true. Returns a confirmation of what was deleted. |
pluggedin_clipboard_list |
no_return_description |
List all clipboard entries with metadata, filterable by content type and paginated (image values truncated to 1000 chars for preview). Returns an array of entry summaries. |
pluggedin_clipboard_push |
no_return_description |
Push a value onto the indexed clipboard with an auto-incrementing index, useful for ordered pipelines or stack-like operations. Returns the newly assigned index and stored entry metadata. |
pluggedin_memory_observe |
no_return_description |
Record an observation during an active memory session; observations are later classified by the Analytics Agent into memory ring types (procedures, practice, longterm, shocks). Returns the stored observation's ID. |
pluggedin_memory_session_end |
name_restates_behavior no_return_description |
Close an active memory session identified by memory_session_id, triggering AI-compressed Z-report generation for that session. Returns the session's final status and a reference to the generated Z-report. |
pluggedin_memory_details |
no_return_description |
Get full details for specific memories by UUID (progressive disclosure Layer 3), used after pluggedin_memory_search narrows down candidates. Returns the complete content and metadata for each requested memory. |
Selection evidence
Confusable tool pairs.
8 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
pluggedin_clipboard_get |
pluggedin_clipboard_list |
high | pluggedin_clipboard_get, when called with neither name nor idx, explicitly lists all entries with pagination — functionally overlapping with clipboard_list. A task like 'show me everything in the clipboard' could plausibly invoke either. |
pluggedin_clipboard_delete |
pluggedin_clipboard_pop |
medium | A task like 'remove the most recent clipboard entry' is ambiguous between clipboard_pop (LIFO removal of highest-indexed entry) and clipboard_delete targeting a specific idx/name, since both result in entry removal. |
pluggedin_clipboard_get |
pluggedin_clipboard_pop |
medium | A task like 'get the last item off the clipboard' could be read as either a non-destructive read (clipboard_get by idx) or a destructive read-and-remove (clipboard_pop), since the phrase 'get' doesn't clarify whether removal is intended. |
pluggedin_create_document |
pluggedin_update_document |
medium | A task like 'save this AI-generated report to the library' is ambiguous when the agent doesn't know if a document already exists — create_document makes a new one while update_document appends/replaces an existing one, and both handle AI-generated content with model metadata. |
pluggedin_list_documents |
pluggedin_search_documents |
medium | list_documents supports a filters.searchQuery text field that overlaps with search_documents' primary query purpose, so a task like 'find documents about authentication' could plausibly map to either tool. |
pluggedin_search_documents |
pluggedin_memory_search |
high | Both tools perform semantic/text search with a 'query' parameter but over different domains (document library vs. memory rings). A generic task like 'search for information about X' doesn't specify which corpus, making tool choice genuinely ambiguous. |
pluggedin_mark_notification_done |
pluggedin_delete_notification |
medium | A task like 'dismiss' or 'clear this notification' is ambiguous between marking it done (soft, keeps record) and deleting it (hard removal), since both take a notificationId and achieve a similar user-facing 'get rid of it' outcome. |
pluggedin_memory_search |
pluggedin_memory_details |
low | Both retrieve memory content, but memory_search is for discovery via natural-language query while memory_details requires known UUIDs; confusion is unlikely unless the agent already has UUIDs and a vague task like 'tell me about this memory' doesn't specify which layer to use. |
Compare the field