{"generated_at":"2026-10-14T20:07:22+00:00","item":{"added_at":"2026-08-24","analysis_method":"independent_manual_review_2026-10-10","assessment_status":"provisional","auth_posture":"auth_required","catalog_reconciliation":{"basis":"Documented actions on the identified catalog surface; not an execution test.","confidence":"high","evidence_completeness":"partial","previous":{"confidence":"low","detail_sha256":"ff5345791c8da94b1471981803d69baaf6dd75451296b9090cab407f7ddd9242","risk":"high"},"proposal_file":"claude-tail-proposals.json","rationale":"Low-confidence entry; primary evidence resolves it. The publisher's MCP doc states the server is read-only for admin/advisor accounts, with 24 read-only tools; run_read_query is a single SELECT/WITH statement on a read replica under a read-only DB role, write keywords and privileged functions blocked, auth/OAuth tables excluded, 30 s timeout. The prior High rested on 'undocumented generic read-query executor' and 'no documented language/schema bounds', both contradicted. What remains is read-only access to the nonprofit's private operational data (donors, recipients, routes, users) => Medium per the read-only-private-business-data anchor. The High 'Executes Code or Commands' card is a mislabel of a bounded read query, and the 'accesses_calendar' tag has no supporting tool.","review_key":"claudesec:8e95de82-ea5c-4942-b0a3-aa4a96e8fafc","reviewed_at":"2026-10-12","runtime_verified":false,"sources":["https://api.anthropic.com/api/directory/servers?verified_tier=anthropic,partner,community","https://surplus.sharingexcess.com/docs","https://surplus.sharingexcess.com/assets/mcp-Cogl0QTJ.js","https://mcp.sharingexcess.com/.well-known/oauth-protected-resource"],"status":"resolved"},"category":"Web Connector","confidence":"low","description":"Surplus retrieves Sharing Excess food-rescue operational data. Inspect collections, distributions, donors, recipients, routes, and inventory. Authenticated reports summarize rescued weight and impact by category or time.","did":"8e95de82-ea5c-4942-b0a3-aa4a96e8fafc","documentation_url":"https://surplus.sharingexcess.com/docs","editorial_description":{"extended_description":"Tools expose hub and route inventories, stops, top donors or recipients, and a read-query interface.","schema_version":1,"summary":"Surplus retrieves Sharing Excess food-rescue operational data.\nInspect collections, distributions, donors, recipients, routes, and inventory.\nAuthenticated reports summarize rescued weight and impact by category or time."},"homepage_url":"","icon":"https://surplus.sharingexcess.com/logo.png","id":"8e95de82-ea5c-4942-b0a3-aa4a96e8fafc","installs":0,"last_scanned":"","license":"","long_description":"Tools expose hub and route inventories, stops, top donors or recipients, and a read-query interface.","manual_assessment":"high","manual_review":{"all_findings":[{"evidence":"The generic tool name exposes ad-hoc querying over Surplus operational data, with no documented language/schema bounds.","reasoning":"Arbitrary query execution is High even if read-only.","risk_type":"query_execution","severity":"high","title":"Runs a caller-provided read query","triggering_tools_or_skills":["run_read_query"]},{"evidence":"The tools expose private nonprofit/logistics operations and people/organizations.","reasoning":"They are read-only.","risk_type":"private_data_read","severity":"low","title":"Reads donors, recipients, routes, inventory and users","triggering_tools_or_skills":["get_donor","get_recipient","get_route","get_hub_inventory","list_users"]}],"assessment_status":"provisional","auth_and_scopes":"Authentication is required; food rescue donors, recipients, routes, inventory and user data follow Sharing Excess permissions.","blocked_missing_evidence":null,"confidence":"low","displayed_risk":"high","evidence_completeness":"partial","manual_overall_risk":"high","official_sources":[{"accessed_at":"2026-10-10T20:24:37Z","url_or_path":"plutosecurity/plutonium@b749c8dc43536c794409be9805edd48063f045e2:app/data/conn/claudesec/8e95de82-ea5c-4942-b0a3-aa4a96e8fafc.json","what_it_proves":"Candidate PR #125 record identity (name \"Surplus\", publisher, type web_connector) and 24 stored tool names; no tool descriptions stored"},{"accessed_at":"2026-09-22T10:46:07Z","url_or_path":"https://api.anthropic.com/api/directory/servers?verified_tier=anthropic,partner,community (snapshot claude-directory-all-tiers-2026-09-22.json)","what_it_proves":"Official Claude Directory listing https://claude.ai/directory/8e95de82-ea5c-4942-b0a3-aa4a96e8fafc: complete tool_names inventory (24 tools), remote streamable-http endpoint https://mcp.sharingexcess.com/, auth_posture auth_required, directory tier community"}],"primary_reason":"Surplus exposes an undocumented generic read-query executor.","provisional_risk":null,"publication_recommendation":"fix","requires_runtime_verification":true,"review_key":"claude:8e95de82-ea5c-4942-b0a3-aa4a96e8fafc","reviewed_at":"2026-10-10","reviewer_notes":"Reviewed all 24 tools. Official docs were not accessible; publication should document run_read_query syntax and confirm it cannot escape a bounded analytics DSL or run SQL.","risk_domains":{"arbitrary_network_access":"false","authz_ambiguity":"unknown","browser_control":"false","credential_or_admin_actions":"false","deletes_data":"false","deployment_or_infrastructure":"false","dynamic_hidden_actions":"false","filesystem_or_repo_access":"false","forwards_data_to_third_party":"true","modifies_data":"false","persistent_credentials":"true","prompt_injection_exposure":"true","provenance_uncertainty":"true","reads_private_data":"true","runs_code_or_queries":"true","sends_messages_as_user":"false","spends_or_moves_money":"false"},"tools_or_skills_reviewed":24,"tools_or_skills_total":24},"name":"Surplus","needs_runtime_verification":true,"plutonium_url":"https://plutonium.pluto.security/detail.html?planet=claudesec&did=8e95de82-ea5c-4942-b0a3-aa4a96e8fafc&utm_source=plutonium_analysis_skill&utm_medium=claude_skill&utm_campaign=connector_risk_assessment","privacy_policy_url":"https://surplus.sharingexcess.com/terms","provisional_risk":null,"publication_recommendation":"fix","publisher":"Sharing Excess","publisher_url":"https://sharingexcess.com/","remote_url":"https://mcp.sharingexcess.com/","repository_url":"","risk":"medium","risk_severity":"medium","security_risks":[{"description":"Retrieves private donor, recipient, user, route and operational data, including validated read-only queries against a reporting replica.","evidence":"Actions: get_donor, get_recipient, get_user, list_users, list_donors, list_recipients, list_routes, list_analytics_events. https://api.anthropic.com/api/directory/servers?verified_tier=anthropic,partner,community — tool_names for id 8e95de82 (24 tools); https://surplus.sharingexcess.com/assets/mcp-Cogl0QTJ.js (rendered content of https://surplus.sharingexcess.com/docs/developers/mcp) — '## Tools' - 23 curated tools: impact analytics, organization search, operational inventory, events, routes, users\nActions: run_read_query. https://surplus.sharingexcess.com/assets/mcp-Cogl0QTJ.js (rendered content of https://surplus.sharingexcess.com/docs/developers/mcp) — 'run_read_query enforces: Read-only database role with no access to auth/OAuth tables; Single SELECT/WITH statement only; write keywords and privileged functions blocked'","risk_type":"reads_private_data","severity":"medium","title":"Reads donor, recipient and operational records"}],"signature_status":"unknown","source_code_reviewed":false,"support_url":"tech@sharingexcess.com","tags":["reads_private_data"],"tools":[{"description":"","name":"get_collection"},{"description":"","name":"get_distribution"},{"description":"","name":"get_donor"},{"description":"","name":"get_hub"},{"description":"","name":"get_hub_inventory"},{"description":"","name":"get_impact_by_food_category"},{"description":"","name":"get_impact_totals"},{"description":"","name":"get_pounds_over_time"},{"description":"","name":"get_recipient"},{"description":"","name":"get_route"},{"description":"","name":"get_route_inventory"},{"description":"","name":"get_top_donors"},{"description":"","name":"get_top_recipients"},{"description":"","name":"get_user"},{"description":"","name":"list_analytics_events"},{"description":"","name":"list_collections"},{"description":"","name":"list_distributions"},{"description":"","name":"list_donors"},{"description":"","name":"list_hubs"},{"description":"","name":"list_recipients"},{"description":"","name":"list_route_stops"},{"description":"","name":"list_routes"},{"description":"","name":"list_users"},{"description":"","name":"run_read_query","risk":{"category":"code_execution","level":"high","recommendation":"Follow the connector-level remediation and require approval for consequential actions.","why":"This connector can execute code, commands, queries, or dynamically selected actions. Review findings: Arbitrary query execution is High even if read-only."}}],"tools_count":24,"transport":"streamable-http","type":"web_connector","url":"https://claude.ai/directory/8e95de82-ea5c-4942-b0a3-aa4a96e8fafc","uuid":"9a23c9b6-08f6-56df-a354-e9efd8baae56","verification_tier":"community","version":""},"query_key":"surplus","schema_version":1,"status":"match"}
