{"schema_version":"verify.report.v1","generated_at":"2026-07-31T10:28:30.496835+00:00","snapshot_id":"trustsnap_f10dc36c3f965145","server":{"namespace":"ai.agenticshelf","name":"mcp","title":"Agentic Shelf","description":"Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.","homepage_url":"https://www.agenticshelf.ai","docs_url":null,"icon_url":null,"support_url":null,"remote_url":"https://api.agenticshelf.ai/mcp","server_card_url":null,"latest_version":"1.0.0","current_status":"healthy","current_score":70.2,"transport_type":"streamable-http","has_oauth":false,"has_dcr":false,"has_prompts":false,"tool_count":7,"current_validation_schema_version":"16d1d270090d6c8f","last_validated_at":"2026-07-31T05:31:35.690437+00:00","registry_source":"official_registry","registry_identifier":"ai.agenticshelf/mcp","canonical_identifier":"ai.agenticshelf/mcp","current_score_components":{"auth_operability_score":2.0,"error_contract_score":0.0,"rate_limit_semantics_score":2.0,"schema_completeness_score":2.0,"backward_compatibility_score":2.0,"slo_health_score":4.0,"security_hygiene_score":3.0,"task_success_score":4.0,"trust_confidence_score":1.75,"abuse_noise_ratio_score":4.0,"prompt_contract_score":2.0,"resource_contract_score":2.0,"discovery_metadata_score":4.0,"registry_consistency_score":2.0,"installability_score":4.0,"session_semantics_score":4.0,"tool_surface_design_score":3.0,"result_shape_stability_score":3.0,"oauth_interop_score":3.0,"recovery_semantics_score":0.0,"maintenance_signal_score":3.0,"adoption_signal_score":3.0,"freshness_confidence_score":3.0,"transport_fidelity_score":4.0,"spec_recency_score":2.0,"session_resume_score":3.0,"step_up_auth_score":3.0,"transport_compliance_score":2.0,"utility_coverage_score":2.0,"advanced_capability_coverage_score":3.0,"connector_publishability_score":3.0,"tool_snapshot_churn_score":3.0,"connector_replay_score":3.0,"request_association_score":3.0,"interactive_flow_safety_score":4.0,"action_safety_score":2.0,"official_registry_presence_score":4.0,"provenance_divergence_score":4.0,"safety_transparency_score":3.0,"tool_capability_clarity_score":3.0,"destructive_operation_safety_score":3.0,"egress_ssrf_resilience_score":3.0,"execution_sandbox_safety_score":2.0,"data_exfiltration_resilience_score":3.35,"least_privilege_scope_score":2.0,"secret_handling_hygiene_score":3.0,"dependency_supply_chain_signal_score":2.5,"input_sanitization_safety_score":3.0,"tool_namespace_clarity_score":4.0},"capability_taxonomy":["development","database","search","communication","read","write","network","admin","automation","web","monitoring","export","exec","streamable_http"],"machine_summary":{"verdict":"safe_for_evaluation","best_for":["Claude Desktop","Smithery","Generic Streamable HTTP"],"avoid_if":["You need a low-risk tool surface."],"requires_auth":false,"supports_oauth":false,"risk_level":"high"},"taxonomy_tags":["development","database","search","communication"],"score_decomposition":[{"key":"access_protocol","label":"Access & Protocol","score":32.0,"max_score":44.0,"hint":"Connectivity, auth, and transport expectations for common clients.","components":[{"key":"auth_operability_score","score":2.0},{"key":"installability_score","score":4.0},{"key":"session_semantics_score","score":4.0},{"key":"transport_fidelity_score","score":4.0},{"key":"spec_recency_score","score":2.0},{"key":"session_resume_score","score":3.0},{"key":"step_up_auth_score","score":3.0},{"key":"transport_compliance_score","score":2.0},{"key":"request_association_score","score":3.0},{"key":"oauth_interop_score","score":3.0},{"key":"least_privilege_scope_score","score":2.0}]},{"key":"interface_quality","label":"Interface Quality","score":32.0,"max_score":56.0,"hint":"How well the tool/resource interface communicates and behaves under automation.","components":[{"key":"error_contract_score","score":0.0},{"key":"rate_limit_semantics_score","score":2.0},{"key":"schema_completeness_score","score":2.0},{"key":"prompt_contract_score","score":2.0},{"key":"resource_contract_score","score":2.0},{"key":"tool_surface_design_score","score":3.0},{"key":"tool_capability_clarity_score","score":3.0},{"key":"tool_namespace_clarity_score","score":4.0},{"key":"result_shape_stability_score","score":3.0},{"key":"utility_coverage_score","score":2.0},{"key":"advanced_capability_coverage_score","score":3.0},{"key":"tool_snapshot_churn_score","score":3.0},{"key":"connector_replay_score","score":3.0},{"key":"recovery_semantics_score","score":0.0}]},{"key":"security_posture","label":"Security Posture","score":26.35,"max_score":36.0,"hint":"How safely the exposed tool surface handles destructive actions, egress, execution, secrets, and risky inputs.","components":[{"key":"security_hygiene_score","score":3.0},{"key":"destructive_operation_safety_score","score":3.0},{"key":"egress_ssrf_resilience_score","score":3.0},{"key":"execution_sandbox_safety_score","score":2.0},{"key":"data_exfiltration_resilience_score","score":3.35},{"key":"secret_handling_hygiene_score","score":3.0},{"key":"input_sanitization_safety_score","score":3.0},{"key":"interactive_flow_safety_score","score":4.0},{"key":"action_safety_score","score":2.0}]},{"key":"reliability_trust","label":"Reliability & Trust","score":18.75,"max_score":24.0,"hint":"Operational stability, consistency, and trustworthiness over time.","components":[{"key":"backward_compatibility_score","score":2.0},{"key":"slo_health_score","score":4.0},{"key":"task_success_score","score":4.0},{"key":"trust_confidence_score","score":1.75},{"key":"abuse_noise_ratio_score","score":4.0},{"key":"freshness_confidence_score","score":3.0}]},{"key":"discovery_governance","label":"Discovery & Governance","score":22.5,"max_score":28.0,"hint":"How well the server is documented, listed, and governed in public registries.","components":[{"key":"discovery_metadata_score","score":4.0},{"key":"registry_consistency_score","score":2.0},{"key":"maintenance_signal_score","score":3.0},{"key":"safety_transparency_score","score":3.0},{"key":"dependency_supply_chain_signal_score","score":2.5},{"key":"official_registry_presence_score","score":4.0},{"key":"provenance_divergence_score","score":4.0}]},{"key":"adoption_market","label":"Adoption & Market","score":6.0,"max_score":8.0,"hint":"Adoption clues and public evidence that the server is intended for external use.","components":[{"key":"adoption_signal_score","score":3.0},{"key":"connector_publishability_score","score":3.0}]}],"validation_diff":null,"tool_snapshot_diff":null,"connector_replay":{"status":"missing","backward_compatible":false,"would_break_after_refresh":false,"added_tools":[],"removed_tools":[],"required_arg_breaks":[],"output_breaks":[],"additive_output_changes":[]},"request_association":{"status":"missing","advertised_capabilities":[],"session_id_present":false,"protocol_version":null,"observed_methods":[],"violating_methods":[],"http_status":null,"issues":[]},"production_readiness":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use.","badge":"score-medium","critical_alerts":0},"recommended_for":[{"label":"Claude Desktop","reason":"Claude Desktop is marked compatible with score 100."},{"label":"Smithery","reason":"Smithery is marked compatible with score 80."},{"label":"Generic Streamable HTTP","reason":"Generic Streamable HTTP is marked compatible with score 100."}],"history_summary":{"points":[{"timestamp":"2026-07-31T05:31:35.690437+00:00","score":70.2,"status":"healthy","latency_ms":657.21,"tool_count":7,"prompt_count":0,"resource_count":0}],"status_counts":{"healthy":1},"score_delta_7d":null,"score_delta_30d":null,"avg_latency_ms":657.21,"healthy_ratio_recent":1.0,"freshness_hours":4.94,"latest_status":"healthy"},"validation_timeline":[{"timestamp":"2026-07-31T05:31:35.690437+00:00","summary_status":"healthy","score":70.2,"protocol_version":"2025-03-26","auth_mode":"public","tool_count":7,"prompt_count":0,"resource_count":0,"high_risk_tools":1,"safe_to_publish":false,"change_flags":[]}],"evidence_confidence":{"score":76.25,"label":"high","reason":"Based on 1 recent validations, 26 captured checks, and validation age of 4.9 hours.","live_check_count":26,"validation_age_hours":4.94},"incident_feed":[{"type":"validation_snapshot","timestamp":"2026-07-31T05:31:35.690437+00:00","title":"Latest validation: healthy","message":"Score 70.2 with status healthy."}],"remediations":[{"code":"add_confirmation_semantics","severity":"high","title":"Add confirmation and dry-run semantics for risky actions","why":"High-risk write, delete, exec, or egress tools should communicate safeguards clearly.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"fix_transport_compliance","severity":"high","title":"Align session and protocol behavior with Streamable HTTP expectations","why":"Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics.","action":"Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.","playbook":["Return `Mcp-Session-Id` and `Mcp-Protocol-Version` headers consistently on streamable HTTP responses.","Honor `DELETE` session teardown and return `404` when a deleted session is reused.","Reject invalid protocol-version headers with `400 Bad Request`."],"maintainer_context":null},{"code":"enforce_request_association","severity":"high","title":"Associate roots, sampling, and elicitation with active client requests","why":"Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"publish_oauth_protected_resource","severity":"high","title":"Expose /.well-known/oauth-protected-resource","why":"Without a protected-resource document, OAuth clients cannot discover auth requirements reliably.","action":"Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.","playbook":["Serve `/.well-known/oauth-protected-resource` from the same host as the MCP endpoint.","Point it at the authorization server metadata URL.","Confirm clients receive consistent auth hints before tool execution."],"maintainer_context":null},{"code":"protect_connector_refreshes","severity":"high","title":"Keep connector refreshes backward compatible","why":"Managed connector clients freeze tool snapshots, so removed tools, new required args, and breaking output changes can break published integrations after refresh.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"publish_oauth_authorization_server","severity":"high","title":"Publish OAuth authorization-server metadata","why":"Clients need authorization-server metadata to discover issuer, endpoints, and DCR support.","action":"Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.","playbook":["Publish `/.well-known/oauth-authorization-server` from the issuer.","Add `registration_endpoint` if DCR is supported.","Verify issuer, authorization, token, and jwks metadata are all reachable."],"maintainer_context":null},{"code":"update_protocol_version","severity":"medium","title":"Adopt a current MCP protocol revision","why":"Older protocol revisions reduce compatibility with newer clients and registry programs.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"improve_connector_publishability","severity":"medium","title":"Close connector-publishing gaps","why":"Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"tighten_step_up_auth","severity":"medium","title":"Document minimal scopes and return cleaner auth challenges","why":"Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints.","action":"Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.","playbook":["Advertise the narrowest viable scopes in OAuth metadata.","Return `WWW-Authenticate` challenges with scope or insufficient-scope hints when additional consent is needed.","Revalidate with both public discovery and auth-required flows."],"maintainer_context":null},{"code":"publish_openid_configuration","severity":"medium","title":"Publish OpenID configuration","why":"OIDC metadata improves token validation and client compatibility.","action":"Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"stabilize_tool_surface","severity":"medium","title":"Reduce tool-surface churn","why":"Frequent add/remove or output-shape drift makes published connectors and cached tool snapshots brittle.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"repair_session_resume","severity":"medium","title":"Support resumable HTTP sessions cleanly","why":"Modern MCP clients increasingly expect resumable session behavior on streamable HTTP transports.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"expand_utility_coverage","severity":"low","title":"Expose modern utility surfaces like completions, pagination, or tasks","why":"Utility coverage improves interoperability with larger clients and long-lived agent workflows.","action":"Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.","playbook":["Advertise `completions`, pagination cursors, and `tasks` only when they are actually supported.","Return `nextCursor` on large list operations when pagination is available.","Document task support and whether it requires step-up auth."],"maintainer_context":null},{"code":"expand_advanced_capabilities","severity":"low","title":"Publish newer MCP capability signals","why":"Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null}],"client_remediation_modes":[{"key":"openai_connectors","label":"ChatGPT custom connector","status":"partial","why_not_ready":[{"label":"OpenAI connectors expect OAuth for remote server auth.","state":"blocked"},{"label":"Dynamic client registration materially improves connector setup.","state":"blocked"},{"label":"search fetch only is not yet satisfied","state":"blocked"},{"label":"oauth configured is not yet satisfied","state":"blocked"},{"label":"admin refresh required is not yet satisfied","state":"blocked"},{"label":"safe for company knowledge is not yet satisfied","state":"blocked"}],"maintainer_context":null},{"key":"claude_desktop","label":"Claude remote MCP","status":"ready","why_not_ready":[{"label":"search fetch only is not yet satisfied","state":"blocked"},{"label":"oauth configured is not yet satisfied","state":"blocked"},{"label":"admin refresh required is not yet satisfied","state":"blocked"},{"label":"safe for company knowledge is not yet satisfied","state":"blocked"},{"label":"safe for messages api remote mcp is not yet satisfied","state":"blocked"},{"label":"Transport compliance issues should be resolved before wider client rollout.","state":"blocked"}],"maintainer_context":null},{"key":"write_safe","label":"Write-safe publishing","status":"blocked","why_not_ready":[{"label":"Add a clearer auth boundary around risky write actions.","state":"blocked"},{"label":"Add confirmation or dry-run semantics for risky actions.","state":"blocked"},{"label":"Constrain or sandbox exec-capable tools before publishing broadly.","state":"blocked"}],"maintainer_context":null}],"client_profiles":[{"key":"openai_connectors","label":"OpenAI Connectors","score":77.8,"compatibility":"partial","missing_requirements":["OpenAI connectors expect OAuth for remote server auth.","Dynamic client registration materially improves connector setup."],"snippet":"Connector URL: https://api.agenticshelf.ai/mcp\n# No OAuth metadata detected.\n# Server: ai.agenticshelf/mcp"},{"key":"claude_desktop","label":"Claude Desktop","score":100.0,"compatibility":"compatible","missing_requirements":[],"snippet":"{\n  \"mcpServers\": {\n    \"mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"https://api.agenticshelf.ai/mcp\"]\n    }\n  }\n}"},{"key":"smithery","label":"Smithery","score":80.0,"compatibility":"compatible","missing_requirements":["Machine-readable failure semantics should be present."],"snippet":"smithery mcp add \"https://api.agenticshelf.ai/mcp\""},{"key":"generic_streamable_http","label":"Generic Streamable HTTP","score":100.0,"compatibility":"compatible","missing_requirements":[],"snippet":"curl -sS https://api.agenticshelf.ai/mcp -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-03-26\",\"capabilities\":{},\"clientInfo\":{\"name\":\"mcp-verify\",\"version\":\"0.1.0\"}}}'"}],"client_readiness_verdicts":[{"key":"openai_connectors","label":"Client compatibility: ChatGPT","status":"partial","reason":"OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.","evidence":[{"check":"initialize","status":"ok","source":"live_validation","note":null,"http_status":200},{"check":"tools_list","status":"ok","source":"live_validation","note":null,"http_status":200},{"check":"transport_compliance_probe","status":"warning","source":"live_validation","note":null,"http_status":null},{"check":"step_up_auth_probe","status":"missing","source":"live_validation","note":null,"http_status":null},{"check":"connector_replay_probe","status":"missing","source":"live_validation","note":"Frozen tool snapshots must survive refresh.","http_status":null},{"check":"request_association_probe","status":"missing","source":"live_validation","note":"Roots, sampling, and elicitation should stay request-scoped.","http_status":null}],"confidence":{"score":76.25,"label":"high"},"source_resolution":{"winner":"live_validation","supporting_sources":["live_validation","history","server_card"],"disagreements":[]}},{"key":"claude_desktop","label":"Client compatibility: Claude","status":"ready","reason":"No major blockers detected.","evidence":[{"check":"initialize","status":"ok","source":"live_validation","note":null,"http_status":200},{"check":"tools_list","status":"ok","source":"live_validation","note":null,"http_status":200},{"check":"transport_compliance_probe","status":"warning","source":"live_validation","note":null,"http_status":null}],"confidence":{"score":76.25,"label":"high"},"source_resolution":{"winner":"live_validation","supporting_sources":["live_validation","history","server_card"],"disagreements":[]}},{"key":"unsafe_for_write_actions","label":"Write-action publishing","status":"yes","reason":"Blocked until safeguards and confirmation semantics are verified for write, exec, or destructive tools.","evidence":[{"check":"action_safety_probe","status":"error","source":"live_validation","note":null,"http_status":null}],"confidence":{"score":76.25,"label":"high"},"source_resolution":{"winner":"live_validation","supporting_sources":["live_validation","history"],"disagreements":[]}},{"key":"snapshot_churn_risk","label":"Snapshot churn risk","status":"low","reason":"No material tool-surface churn detected in the latest comparison.","evidence":[{"check":"tool_snapshot_probe","status":"missing","source":"live_validation","note":null,"http_status":null},{"check":"connector_replay_probe","status":"missing","source":"live_validation","note":null,"http_status":null}],"confidence":{"score":76.25,"label":"high"},"source_resolution":{"winner":"history","supporting_sources":["history","live_validation"],"disagreements":[]}}],"publishability_policy_profiles":[{"key":"chatgpt_custom_connector","label":"ChatGPT custom connector compatibility","status":"caution","gates":{"search_fetch_only":false,"write_actions_present":true,"oauth_configured":false,"admin_refresh_required":false,"safe_for_company_knowledge":false,"safe_for_messages_api_remote_mcp":false},"reason":"OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup."},{"key":"claude_remote_mcp","label":"Claude remote MCP compatibility","status":"ready","gates":{"search_fetch_only":false,"write_actions_present":true,"oauth_configured":false,"admin_refresh_required":false,"safe_for_company_knowledge":false,"safe_for_messages_api_remote_mcp":false},"reason":"Transport, discovery, and remote-MCP assumptions are satisfied."}],"compatibility_fixtures":[{"key":"chatgpt_custom_connector","label":"ChatGPT custom connector fixture","status":"degraded","assumptions":[{"name":"remote_http_endpoint","status":"passes"},{"name":"oauth_discovery","status":"degraded"},{"name":"frozen_tool_snapshot_refresh","status":"passes"},{"name":"request_association","status":"passes"}],"reason":"OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup."},{"key":"anthropic_remote_mcp","label":"Anthropic remote MCP fixture","status":"passes","assumptions":[{"name":"remote_transport","status":"passes"},{"name":"tool_discovery","status":"passes"},{"name":"auth_connect","status":"passes"},{"name":"safe_write_review","status":"degraded"}],"reason":"Remote MCP transport and discovery assumptions are satisfied."}],"install_snippets":{"openai_connectors":"Connector URL: https://api.agenticshelf.ai/mcp\n# No OAuth metadata detected.\n# Server: ai.agenticshelf/mcp","claude_desktop":"{\n  \"mcpServers\": {\n    \"mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"https://api.agenticshelf.ai/mcp\"]\n    }\n  }\n}","smithery":"smithery mcp add \"https://api.agenticshelf.ai/mcp\"","generic_http":"curl -sS https://api.agenticshelf.ai/mcp -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-03-26\",\"capabilities\":{},\"clientInfo\":{\"name\":\"mcp-verify\",\"version\":\"0.1.0\"}}}'"},"aliases":[{"identifier":"ai.agenticshelf/mcp","registry_source":"official_registry","remote_url":"https://api.agenticshelf.ai/mcp","canonical":true,"score":70.2}],"raw_evidence":{"server_identifier":"ai.agenticshelf/mcp","remote_url":"https://api.agenticshelf.ai/mcp","server_card_payload":{"schema_version":"2026-04","serverInfo":{"name":"Agentic Shelf — Live Inventory","version":"0.1.0","description":"Real-time product catalog and inventory across multi-tenant e-commerce stores via MCP. Each merchant connects their Shopify store via OAuth at agenticshelf.ai/console; AI agents query their live catalog using a per-tenant Firebase ID token.","vendor":"Agentic Shelf","homepage":"https://www.agenticshelf.ai","documentation":"https://www.agenticshelf.ai/console","repository":"https://github.com/vboykoCTO/agentic-shelf"},"transport":{"type":"streamable-http","endpoint":"https://api.agenticshelf.ai/mcp"},"authentication":{"type":"bearer","required":false,"scheme":"firebase-id-token","description":"Anonymous tools/list works for discovery. Authenticated tool calls require an Authorization: Bearer <Firebase ID token> header — tokens are issued via the merchant console at agenticshelf.ai/console after a customer signs in with Google and OAuth-connects their Shopify store.","tokenSource":"https://www.agenticshelf.ai/console"},"capabilities":{"tools":[{"name":"check_stock","description":"Real-time inventory, price, and shipping availability for a product SKU. Returns stock count, price in USD, can_ship_today flag.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}},{"name":"get_product_details","description":"Full product metadata: title, description, image URL, tags, inventory quantity. Optimized for AI agents.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}},{"name":"get_price","description":"Current price in USD for a product SKU.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}}]},"tags":["e-commerce","shopify","inventory","shopping","agent","multi-tenant"]},"checks":{"server_card":{"status":"ok","latency_ms":86.52,"details":{"url":"https://api.agenticshelf.ai/.well-known/mcp/server-card.json","payload":{"schema_version":"2026-04","serverInfo":{"name":"Agentic Shelf — Live Inventory","version":"0.1.0","description":"Real-time product catalog and inventory across multi-tenant e-commerce stores via MCP. Each merchant connects their Shopify store via OAuth at agenticshelf.ai/console; AI agents query their live catalog using a per-tenant Firebase ID token.","vendor":"Agentic Shelf","homepage":"https://www.agenticshelf.ai","documentation":"https://www.agenticshelf.ai/console","repository":"https://github.com/vboykoCTO/agentic-shelf"},"transport":{"type":"streamable-http","endpoint":"https://api.agenticshelf.ai/mcp"},"authentication":{"type":"bearer","required":false,"scheme":"firebase-id-token","description":"Anonymous tools/list works for discovery. Authenticated tool calls require an Authorization: Bearer <Firebase ID token> header — tokens are issued via the merchant console at agenticshelf.ai/console after a customer signs in with Google and OAuth-connects their Shopify store.","tokenSource":"https://www.agenticshelf.ai/console"},"capabilities":{"tools":[{"name":"check_stock","description":"Real-time inventory, price, and shipping availability for a product SKU. Returns stock count, price in USD, can_ship_today flag.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}},{"name":"get_product_details","description":"Full product metadata: title, description, image URL, tags, inventory quantity. Optimized for AI agents.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}},{"name":"get_price","description":"Current price in USD for a product SKU.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}}]},"tags":["e-commerce","shopify","inventory","shopping","agent","multi-tenant"]},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"oauth_protected_resource":{"status":"error","latency_ms":42.76,"details":{"url":"https://api.agenticshelf.ai/.well-known/oauth-protected-resource","error":"Client error '404 Not Found' for url 'https://api.agenticshelf.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"}},"oauth_authorization_server":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"openid_configuration":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"initialize":{"status":"ok","latency_ms":93.34,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"AgenticShelf-Inventory","version":"1.28.1"}}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"protocol_version_probe":{"status":"warning","latency_ms":null,"details":{"claimed_version":"2025-03-26","validator_protocol_version":"2025-03-26","latest_known_version":"2025-11-25","releases_behind":2,"lag_days":244}},"tools_list":{"status":"ok","latency_ms":59.69,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"check_stock","description":"Check LIVE inventory, price, and same-day shipping for ONE known SKU.\n\n    The real-time verifier. Call when a shopper asks \"is it in stock\", \"how\n    many are left\", \"can it ship today\", or \"what's the price right now\" and the\n    agent already has the SKU (from list_products / search_products). For\n    discovery use those tools; for full attributes use get_product_details; for\n    price only use get_price. Queries the connected store (Shopify / Amazon /\n    WooCommerce) live, so figures are current rather than cached training data.\n\n    Always call this BEFORE recommending a specific product to buy or adding\n    it to a cart — availability changes hourly. When answering, quote the\n    returned price + availability verbatim (with currency) and prefer these\n    live figures over anything remembered from training data.\n\n    Args:\n        sku: Product SKU (Stock Keeping Unit) - e.g. the ``sku`` field returned\n            by list_products / search_products, like \"RED-WIDGET-001\".\n\n    Returns:\n        Dictionary with:\n        - sku: The requested SKU\n        - in_stock: Boolean availability (the default disclosure; some stores\n          opt into an exact ``stock`` count instead, and may include\n          ``low_stock: true`` as a buy-soon hint)\n        - price: Current price in USD\n        - can_ship_today: Boolean indicating same-day shipping availability\n        - live: provenance flag (True from a connected store, False for demo)\n        - message: Human-readable status message\n        ``error`` is set (and ``live`` False) when the SKU is missing or the\n        store is unreachable.\n\n    Example:\n        >>> await check_stock(\"WIDGET-001\")\n        {\n            \"sku\": \"WIDGET-001\",\n            \"in_stock\": True,\n            \"price\": 29.99,\n            \"can_ship_today\": True,\n            \"message\": \"✅ WIDGET-001 (Awesome Widget) - in stock at $29.99\"\n        }\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"}},"required":["sku"],"title":"check_stockArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"check_stockDictOutput","type":"object"}},{"name":"get_product_details","description":"Get full product details for a SKU, optimized for AI agents (structured JSON).\n\n    Use when a shopper wants depth on a SPECIFIC product the agent already has a\n    SKU for (from list_products / search_products). For discovery, call those\n    first — this tool is a verifier, not a browser.\n\n    The description, product_type, and tags answer suitability questions\n    (\"does it fit X?\", \"is it good for Y?\") — ground such answers in these\n    fields rather than guessing, and link storefront_url when recommending.\n\n    Args:\n        sku: Product SKU — e.g. the ``sku`` field returned by list_products.\n\n    Returns:\n        Catalog dict (title, description, product_type, tags, price,\n        in_stock, available, image_url); ``found`` is False when the\n        SKU is missing. (Stores that opt into exact disclosure return an\n        ``inventory_quantity`` count instead of ``in_stock``.)\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"}},"required":["sku"],"title":"get_product_detailsArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"get_product_detailsDictOutput","type":"object"}},{"name":"get_price","description":"Get the current price (and currency) for a product SKU.\n\n    Returns price + currency ONLY — for stock/shipping use check_stock, for full\n    details use get_product_details. Use when a shopper asks \"how much is X\" and\n    the agent already has the SKU (from list_products / search_products).\n\n    The figure is the store's CURRENT selling price (sales included) — always\n    prefer it over prices remembered from training data or third-party sites,\n    and quote it with its currency.\n\n    Args:\n        sku: Product SKU — e.g. the ``sku`` field returned by list_products.\n\n    Returns:\n        ``{\"sku\", \"price\", \"currency\", \"live\"}``; price 0.0 with an ``error``\n        when the SKU isn't found.\n\n    Example:\n        >>> await get_price(\"WIDGET-001\")\n        {\"sku\": \"WIDGET-001\", \"price\": 29.99, \"currency\": \"USD\"}\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"}},"required":["sku"],"title":"get_priceArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"get_priceDictOutput","type":"object"}},{"name":"list_products","description":"List products from the connected store, paginated.\n\n    Use this tool when an agent needs to DISCOVER products by browsing the\n    catalog rather than VERIFYING a known SKU. The response includes the SKU\n    for every product, so a follow-up ``check_stock(sku)`` or\n    ``get_product_details(sku)`` is a natural next step. When the shopper's\n    request contains matchable terms (\"HEPA purifier\", \"dark roast\"), prefer\n    search_products — it needs fewer pages to find the right item. Only\n    sellable products are returned (drafts/archived are excluded).\n\n    Recommended flow: search_products/list_products -> get_product_details\n    -> check_stock -> add_to_cart/create_checkout.\n\n    Args:\n        limit: Number of products to return (1-50, default 10).\n        cursor: Opaque cursor from a previous response's ``next_cursor``.\n            Omit for the first page.\n\n    Returns:\n        Dictionary with:\n        - products: list of {sku, title, description (≤400 chars),\n          product_type, tags, price, currency, available, image_url,\n          storefront_url}\n        - next_cursor: str or null — pass to the next call to paginate\n        - has_more: bool — whether more products exist\n        - live / source: provenance flags\n    ","inputSchema":{"properties":{"limit":{"default":10,"title":"Limit","type":"integer"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cursor"}},"title":"list_productsArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"list_productsDictOutput","type":"object"}},{"name":"search_products","description":"Search products in the connected store by keyword.\n\n    Use this when a shopper's query suggests specific terms the agent can\n    match against product titles or tags — e.g. \"HEPA air purifier\" or\n    \"leather wristwatch\". Matches Shopify's native storefront search\n    behavior, so results align with what customers would find on the site.\n\n    Search with the fewest distinctive words (product nouns, not full\n    sentences). If a search returns nothing, retry with a broader term or\n    fall back to list_products and scan titles. Only sellable products are\n    returned (drafts/archived are excluded).\n\n    Recommended flow: search_products -> get_product_details -> check_stock\n    -> add_to_cart/create_checkout.\n\n    Args:\n        query: Keyword or phrase to match.\n        limit: Max products to return (1-50, default 10).\n\n    Returns:\n        Same shape as ``list_products``. Empty products list when no matches.\n    ","inputSchema":{"properties":{"query":{"title":"Query","type":"string"},"limit":{"default":10,"title":"Limit","type":"integer"}},"required":["query"],"title":"search_productsArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"search_productsDictOutput","type":"object"}},{"name":"add_to_cart","description":"Add a product to a cart and return its checkout URL.\n\n    IMPORTANT: this does NOT charge or place an order. It returns a ``cart_url``\n    /``checkout_url`` the shopper opens to review the pre-filled cart and pay\n    themselves. Use for \"add X to my cart\" / \"I want to buy X\". For multiple\n    items in one cart, use create_checkout. Verify availability with\n    check_stock first — adding an out-of-stock item wastes the shopper's\n    click-through.\n\n    Args:\n        sku: Product SKU (from list_products / search_products).\n        quantity: How many (default 1).\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"},"quantity":{"default":1,"title":"Quantity","type":"integer"}},"required":["sku"],"title":"add_to_cartArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"add_to_cartDictOutput","type":"object"}},{"name":"create_checkout","description":"Build a multi-item cart and return its checkout URL.\n\n    IMPORTANT: this does NOT charge or place an order — it returns a\n    ``checkout_url`` the shopper opens to pay. Use to assemble a basket the\n    shopper asked for.\n\n    Args:\n        items: list of ``{\"sku\": str, \"quantity\": int}`` (quantity defaults 1).\n    ","inputSchema":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"title":"Items","type":"array"}},"required":["items"],"title":"create_checkoutArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"create_checkoutDictOutput","type":"object"}}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"prompts_list":{"status":"ok","latency_ms":48.68,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":3,"result":{"prompts":[]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"prompt_get":{"status":"missing","latency_ms":null,"details":{"reason":"not_advertised"}},"resources_list":{"status":"ok","latency_ms":60.57,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":5,"result":{"resources":[]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"resource_read":{"status":"missing","latency_ms":null,"details":{"reason":"not_advertised"}},"probe_noise_resilience":{"status":"ok","latency_ms":52.78,"details":{"url":"https://api.agenticshelf.ai/robots.txt","http_status":404,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"determinism_probe":{"status":"ok","latency_ms":54.0,"details":{"attempts":2,"successful":2,"matches":2,"stable_ratio":1.0,"baseline_signature":"1930dc6dbdaba741ffb5d8471558f763c50f3773cfc33beb7088a84481882331","errors":[]}},"session_resume_probe":{"status":"warning","latency_ms":null,"details":{"reason":"no_session_id","transport":"streamable-http","resume_expected":true,"protocol_version":"2025-03-26"}},"step_up_auth_probe":{"status":"missing","latency_ms":null,"details":{"oauth_present":false,"auth_required_checks":[],"supported_scopes":[],"scope_specificity_ratio":0.0,"broad_scopes":[],"challenge_headers":[],"step_up_signals":[],"minimal_scope_documented":false}},"transport_compliance_probe":{"status":"warning","latency_ms":46.07,"details":{"transport":"streamable-http","session_id_present":false,"protocol_header_present":false,"last_event_id_visible":false,"requested_protocol_version":"2025-03-26","bad_protocol_status_code":400,"bad_protocol_payload":{"jsonrpc":"2.0","id":"server-error","error":{"code":-32600,"message":"Bad Request: Unsupported protocol version: 1999-99-99. Supported versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25"}},"bad_protocol_headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"},"bad_protocol_error":null,"delete_status_code":null,"delete_error":null,"expired_session_status_code":null,"expired_session_error":null,"issues":["missing_session_id","missing_protocol_header"]}},"utility_coverage_probe":{"status":"missing","latency_ms":49.57,"details":{"completions":{"advertised":false,"sample_target":null,"live_probe":"not_executed"},"pagination":{"supported":false,"next_cursor_methods":[],"metadata_signal":false},"tasks":{"advertised":false,"probe_status":"missing","http_status":200},"initialize_capability_keys":["experimental","prompts","resources","tools"]}},"advanced_capabilities_probe":{"status":"warning","latency_ms":null,"details":{"capabilities":{"prompts":true,"resources":true,"completions":false,"roots":false,"sampling":false,"elicitation":false,"structured_outputs":true,"resource_links":false},"enabled_count":3,"enabled":["prompts","resources","structured_outputs"],"initialize_capability_keys":["experimental","prompts","resources","tools"]}},"tool_snapshot_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_historical_snapshot","current_tool_count":7}},"connector_replay_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_historical_snapshot"}},"request_association_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_request_association_capabilities_advertised"}},"interactive_flow_probe":{"status":"ok","latency_ms":null,"details":{"risk_hits":[],"safe_hits":["oauth","browser"],"oauth_supported":false,"prompt_available":false}},"action_safety_probe":{"status":"error","latency_ms":null,"details":{"summary":{"tool_count":7,"high_risk_tools":1,"destructive_tools":0,"exec_tools":1,"egress_tools":0,"secret_tools":0,"bulk_access_tools":2,"risk_distribution":{"low":0,"medium":6,"high":1,"critical":0},"capability_distribution":{"read":7,"write":5,"network":6,"admin":2,"export":2,"exec":1}},"auth_present":false,"safeguard_count":1,"confirmation_signals":[]}},"official_registry_probe":{"status":"ok","latency_ms":null,"details":{"registry_source":"official_registry","registry_identifier":"ai.agenticshelf/mcp","direct_match":true,"official_peer_count":1}},"provenance_divergence_probe":{"status":"ok","latency_ms":null,"details":{"direct_official_match":true,"registry_title":null,"server_card_title":"Agentic Shelf — Live Inventory","registry_version":null,"server_card_version":"0.1.0","registry_homepage":null,"server_card_homepage":null,"registry_repository":null,"server_card_repository":null,"drift_fields":[],"metadata_document_count":3}},"connector_publishability_probe":{"status":"warning","latency_ms":null,"details":{"transport":"streamable-http","tool_count":7,"high_risk_tools":1,"blockers":["action_safety"],"criteria":{"remote_transport":true,"initialize":true,"tools_list":true,"protocol_version":true,"session_resume":true,"step_up_auth":true,"transport_compliance":true,"connector_replay":true,"request_association":true,"action_safety":false,"server_card":true,"tool_surface":true,"auth_flow":true}}}},"failures":{"oauth_protected_resource":{"url":"https://api.agenticshelf.ai/.well-known/oauth-protected-resource","error":"Client error '404 Not Found' for url 'https://api.agenticshelf.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"},"oauth_authorization_server":{"reason":"no_authorization_server"},"openid_configuration":{"reason":"no_authorization_server"}}},"active_alerts":[],"maintainer_analytics":{"validation_run_count":1,"average_latency_ms":657.21,"healthy_run_ratio_recent":1.0,"registry_presence_count":1,"active_alert_count":0,"watcher_count":0,"verified_claim":false,"taxonomy_tags":["development","database","search","communication"],"score_trend":[70.2],"remediation_count":14,"high_risk_tool_count":1,"destructive_tool_count":0,"exec_tool_count":1},"public_server_reputation":{"validation_success_ratio_7d":1.0,"validation_success_ratio_30d":1.0,"mean_time_to_recover_hours":null,"breaking_diffs_30d":0,"registry_drift_frequency_30d":0,"snapshot_change_frequency_30d":0},"maintainer_response_quality":{"score":16.67,"signals":{"verified_maintainer_claim":false,"support_contact_present":false,"changelog_present":false,"incident_notes_present":false,"tool_change_documented":true,"annotation_history_present":false},"annotation_count":0,"latest_annotation_at":null},"maintainer_annotations":[],"maintainer_rebuttals":[],"security_posture_summary":{"tool_count":7,"high_risk_tools":1,"destructive_tools":0,"exec_tools":1,"egress_tools":0,"secret_tools":0,"bulk_access_tools":2,"risk_distribution":{"low":0,"medium":6,"high":1,"critical":0},"capability_distribution":{"read":7,"write":5,"network":6,"admin":2,"export":2,"exec":1}},"tool_security_inventory":[{"name":"check_stock","description":"Check LIVE inventory, price, and same-day shipping for ONE known SKU.\n\n    The real-time verifier. Call when a shopper asks \"is it in stock\", \"how\n    many are left\", \"can it ship today\", or \"what's the price right now\" and the\n    agent already has the SKU (from list_products / search_products). For\n    discovery use those tools; for full attributes use get_product_details; for\n    price only use get_price. Queries the connected store (Shopify / Amazon /\n    WooCommerce) live, so figures are current rather than cached training data.\n\n    Always call this BEFORE recommending a specific product to buy or adding\n    it to a cart — availability changes hourly. When answering, quote the\n    returned price + availability verbatim (with currency) and prefer these\n    live figures over anything remembered from training data.\n\n    Args:\n        sku: Product SKU (Stock Keeping Unit) - e.g. the ``sku`` field returned\n            by list_products / search_products, like \"RED-WIDGET-001\".\n\n    Returns:\n        Dictionary with:\n        - sku: The requested SKU\n        - in_stock: Boolean availability (the default disclosure; some stores\n          opt into an exact ``stock`` count instead, and may include\n          ``low_stock: true`` as a buy-soon hint)\n        - price: Current price in USD\n        - can_ship_today: Boolean indicating same-day shipping availability\n        - live: provenance flag (True from a connected store, False for demo)\n        - message: Human-readable status message\n        ``error`` is set (and ``live`` False) when the SKU is missing or the\n        store is unreachable.\n\n    Example:\n        >>> await check_stock(\"WIDGET-001\")\n        {\n            \"sku\": \"WIDGET-001\",\n            \"in_stock\": True,\n            \"price\": 29.99,\n            \"can_ship_today\": True,\n            \"message\": \"✅ WIDGET-001 (Awesome Widget) - in stock at $29.99\"\n        }","capabilities":["read","write","network","admin"],"risk_flags":["admin_mutation"],"risk_level":"medium","has_safeguards":false,"capability_taxonomy":["read","write","network","admin","development","search","communication","automation"]},{"name":"get_product_details","description":"Get full product details for a SKU, optimized for AI agents (structured JSON).\n\n    Use when a shopper wants depth on a SPECIFIC product the agent already has a\n    SKU for (from list_products / search_products). For discovery, call those\n    first — this tool is a verifier, not a browser.\n\n    The description, product_type, and tags answer suitability questions\n    (\"does it fit X?\", \"is it good for Y?\") — ground such answers in these\n    fields rather than guessing, and link storefront_url when recommending.\n\n    Args:\n        sku: Product SKU — e.g. the ``sku`` field returned by list_products.\n\n    Returns:\n        Catalog dict (title, description, product_type, tags, price,\n        in_stock, available, image_url); ``found`` is False when the\n        SKU is missing. (Stores that opt into exact disclosure return an\n        ``inventory_quantity`` count instead of ``in_stock``.)","capabilities":["read","network"],"risk_flags":[],"risk_level":"medium","has_safeguards":false,"capability_taxonomy":["read","network","development","search","web","automation","monitoring"]},{"name":"get_price","description":"Get the current price (and currency) for a product SKU.\n\n    Returns price + currency ONLY — for stock/shipping use check_stock, for full\n    details use get_product_details. Use when a shopper asks \"how much is X\" and\n    the agent already has the SKU (from list_products / search_products).\n\n    The figure is the store's CURRENT selling price (sales included) — always\n    prefer it over prices remembered from training data or third-party sites,\n    and quote it with its currency.\n\n    Args:\n        sku: Product SKU — e.g. the ``sku`` field returned by list_products.\n\n    Returns:\n        ``{\"sku\", \"price\", \"currency\", \"live\"}``; price 0.0 with an ``error``\n        when the SKU isn't found.\n\n    Example:\n        >>> await get_price(\"WIDGET-001\")\n        {\"sku\": \"WIDGET-001\", \"price\": 29.99, \"currency\": \"USD\"}","capabilities":["read","admin"],"risk_flags":[],"risk_level":"medium","has_safeguards":false,"capability_taxonomy":["read","admin","search","automation"]},{"name":"list_products","description":"List products from the connected store, paginated.\n\n    Use this tool when an agent needs to DISCOVER products by browsing the\n    catalog rather than VERIFYING a known SKU. The response includes the SKU\n    for every product, so a follow-up ``check_stock(sku)`` or\n    ``get_product_details(sku)`` is a natural next step. When the shopper's\n    request contains matchable terms (\"HEPA purifier\", \"dark roast\"), prefer\n    search_products — it needs fewer pages to find the right item. Only\n    sellable products are returned (drafts/archived are excluded).\n\n    Recommended flow: search_products/list_products -> get_product_details\n    -> check_stock -> add_to_cart/create_checkout.\n\n    Args:\n        limit: Number of products to return (1-50, default 10).\n        cursor: Opaque cursor from a previous response's ``next_cursor``.\n            Omit for the first page.\n\n    Returns:\n        Dictionary with:\n        - products: list of {sku, title, description (≤400 chars),\n          product_type, tags, price, currency, available, image_url,\n          storefront_url}\n        - next_cursor: str or null — pass to the next call to paginate\n        - has_more: bool — whether more products exist\n        - live / source: provenance flags","capabilities":["read","write","network","export"],"risk_flags":["bulk_data_access"],"risk_level":"medium","has_safeguards":true,"capability_taxonomy":["read","write","network","export","search","web","automation","monitoring"]},{"name":"search_products","description":"Search products in the connected store by keyword.\n\n    Use this when a shopper's query suggests specific terms the agent can\n    match against product titles or tags — e.g. \"HEPA air purifier\" or\n    \"leather wristwatch\". Matches Shopify's native storefront search\n    behavior, so results align with what customers would find on the site.\n\n    Search with the fewest distinctive words (product nouns, not full\n    sentences). If a search returns nothing, retry with a broader term or\n    fall back to list_products and scan titles. Only sellable products are\n    returned (drafts/archived are excluded).\n\n    Recommended flow: search_products -> get_product_details -> check_stock\n    -> add_to_cart/create_checkout.\n\n    Args:\n        query: Keyword or phrase to match.\n        limit: Max products to return (1-50, default 10).\n\n    Returns:\n        Same shape as ``list_products``. Empty products list when no matches.","capabilities":["read","write","exec","network","export"],"risk_flags":["command_execution","bulk_data_access","freeform_input_surface"],"risk_level":"high","has_safeguards":false,"capability_taxonomy":["read","write","exec","network","export","development","database","search","automation"]},{"name":"add_to_cart","description":"Add a product to a cart and return its checkout URL.\n\n    IMPORTANT: this does NOT charge or place an order. It returns a ``cart_url``\n    /``checkout_url`` the shopper opens to review the pre-filled cart and pay\n    themselves. Use for \"add X to my cart\" / \"I want to buy X\". For multiple\n    items in one cart, use create_checkout. Verify availability with\n    check_stock first — adding an out-of-stock item wastes the shopper's\n    click-through.\n\n    Args:\n        sku: Product SKU (from list_products / search_products).\n        quantity: How many (default 1).","capabilities":["read","write","network"],"risk_flags":[],"risk_level":"medium","has_safeguards":false,"capability_taxonomy":["read","write","network","search"]},{"name":"create_checkout","description":"Build a multi-item cart and return its checkout URL.\n\n    IMPORTANT: this does NOT charge or place an order — it returns a\n    ``checkout_url`` the shopper opens to pay. Use to assemble a basket the\n    shopper asked for.\n\n    Args:\n        items: list of ``{\"sku\": str, \"quantity\": int}`` (quantity defaults 1).","capabilities":["read","write","network"],"risk_flags":[],"risk_level":"medium","has_safeguards":false,"capability_taxonomy":["read","write","network","development"]}],"transport_compliance":{"status":"warning","transport":"streamable-http","session_id_present":false,"protocol_header_present":false,"last_event_id_visible":false,"bad_protocol_status_code":400,"delete_status_code":null,"expired_session_status_code":null,"issues":["missing_session_id","missing_protocol_header"]},"utility_coverage":{"status":"missing","completions":{"advertised":false,"sample_target":null,"live_probe":"not_executed"},"pagination":{"supported":false,"next_cursor_methods":[],"metadata_signal":false},"tasks":{"advertised":false,"probe_status":"missing","http_status":200},"initialize_capability_keys":["experimental","prompts","resources","tools"]},"write_action_governance":{"status":"error","safe_to_publish":false,"auth_boundary":"public_or_unclear","blast_radius":"high","summary":{"tool_count":7,"high_risk_tools":1,"destructive_tools":0,"exec_tools":1,"egress_tools":0,"secret_tools":0,"bulk_access_tools":2,"risk_distribution":{"low":0,"medium":6,"high":1,"critical":0},"capability_distribution":{"read":7,"write":5,"network":6,"admin":2,"export":2,"exec":1}},"high_risk_tools":[{"name":"search_products","risk_level":"high","risk_flags":["command_execution","bulk_data_access","freeform_input_surface"],"has_safeguards":false}],"confirmation_signals":[],"safeguard_count":1},"provenance_divergence":{"status":"ok","direct_official_match":true,"drift_fields":[],"registry_title":null,"server_card_title":"Agentic Shelf — Live Inventory","registry_version":null,"server_card_version":"0.1.0","registry_homepage":null,"server_card_homepage":null},"alias_consolidation":{"canonical_identifier":"ai.agenticshelf/mcp","duplicate_count":0,"registry_sources":["official_registry"],"registry_identifiers":["ai.agenticshelf/mcp"],"remote_urls":["https://api.agenticshelf.ai/mcp"],"homepages":["https://www.agenticshelf.ai"],"source_disagreements":[],"source_disagreement_details":{}},"alert_routing":{"active_watch_count":0,"route_counts":{"generic_webhook":0,"slack":0,"teams":0,"email":0},"destinations":[]},"authenticated_validation":{"latest_profile":"remote_mcp","authenticated_session_used":false,"public_score_remains_anonymous":true,"preview_endpoint":"/v1/verify","ci_preview_endpoint":"/v1/ci/preview"},"hosted_runtime":{"schema_version":"verify.hosted_runtime.v1","server":"ai.agenticshelf/mcp","tier":"community","readiness":{"allowed_to_activate":true,"blockers":[],"score":70.2,"min_score":70.0,"freshness_hours":4.935754538333333,"max_freshness_hours":168.0,"latest_validation_run_id":"f4699b81-8061-4b7f-8d2d-d39d7063e024"},"active_deployment_id":null,"active_endpoint_url":null,"deployments":[]},"action_controls_diff":{"snapshot_changed":false,"new_actions":[],"changed_actions":[],"disabled_by_default_candidates":[],"manual_review_candidates":[]},"benchmark_tasks":[{"key":"discover_tools","label":"Discover tools","status":"passes","evidence":[{"check":"initialize","status":"ok","source":"live_validation","note":null,"http_status":200},{"check":"tools_list","status":"ok","source":"live_validation","note":null,"http_status":200}]},{"key":"read_only_fetch_flow","label":"Read-only fetch flow","status":"likely_to_fail","evidence":[{"check":"resource_read","status":"missing","source":"live_validation","note":"resources/read is a strong read-path signal","http_status":null},{"check":"read_only_tool_surface","status":"missing","source":"derived_tool_inventory","note":"No low-risk read-only tools were inferred from the current tool surface.","http_status":null}]},{"key":"oauth_required_connect","label":"OAuth-required connect","status":"degraded","evidence":[{"check":"oauth_protected_resource","status":"error","source":"live_validation","note":null,"http_status":null},{"check":"step_up_auth_probe","status":"missing","source":"live_validation","note":null,"http_status":null}]},{"key":"safe_write_flow_with_confirmation","label":"Safe write flow with confirmation","status":"likely_to_fail","evidence":[{"check":"action_safety_probe","status":"error","source":"live_validation","note":null,"http_status":null}]}],"latest_capability_counts":{"tool_count":7,"prompt_count":0,"resource_count":0},"point_loss_breakdown":[{"key":"recovery_semantics_score","label":"Recovery Semantics","score":0.0,"max_score":4.0,"gap":4.0},{"key":"error_contract_score","label":"Error Contract","score":0.0,"max_score":4.0,"gap":4.0},{"key":"trust_confidence_score","label":"Trust Confidence","score":1.75,"max_score":4.0,"gap":2.25},{"key":"utility_coverage_score","label":"Utility Coverage","score":2.0,"max_score":4.0,"gap":2.0},{"key":"transport_compliance_score","label":"Transport Compliance","score":2.0,"max_score":4.0,"gap":2.0},{"key":"spec_recency_score","label":"Spec Recency","score":2.0,"max_score":4.0,"gap":2.0},{"key":"schema_completeness_score","label":"Schema Completeness","score":2.0,"max_score":4.0,"gap":2.0},{"key":"resource_contract_score","label":"Resource Contract","score":2.0,"max_score":4.0,"gap":2.0},{"key":"registry_consistency_score","label":"Registry Consistency","score":2.0,"max_score":4.0,"gap":2.0},{"key":"rate_limit_semantics_score","label":"Rate Limit Semantics","score":2.0,"max_score":4.0,"gap":2.0},{"key":"prompt_contract_score","label":"Prompt Contract","score":2.0,"max_score":4.0,"gap":2.0},{"key":"least_privilege_scope_score","label":"Least Privilege Scope","score":2.0,"max_score":4.0,"gap":2.0}],"verdict_traces":{"production_readiness":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use.","confidence":{"score":76.25,"label":"high"},"triggering_alerts":[],"winning_source":"live_validation"},"client_readiness":[{"key":"openai_connectors","status":"partial","reason":"OpenAI connectors expect OAuth for remote server auth.; Dynamic client registration materially improves connector setup.","triggering_checks":["initialize","tools_list","transport_compliance_probe","step_up_auth_probe","connector_replay_probe","request_association_probe"],"confidence":{"score":76.25,"label":"high"},"winning_source":"live_validation","conflicting_sources":[]},{"key":"claude_desktop","status":"ready","reason":"No major blockers detected.","triggering_checks":["initialize","tools_list","transport_compliance_probe"],"confidence":{"score":76.25,"label":"high"},"winning_source":"live_validation","conflicting_sources":[]},{"key":"unsafe_for_write_actions","status":"yes","reason":"Blocked until safeguards and confirmation semantics are verified for write, exec, or destructive tools.","triggering_checks":["action_safety_probe"],"confidence":{"score":76.25,"label":"high"},"winning_source":"live_validation","conflicting_sources":[]},{"key":"snapshot_churn_risk","status":"low","reason":"No material tool-surface churn detected in the latest comparison.","triggering_checks":["tool_snapshot_probe","connector_replay_probe"],"confidence":{"score":76.25,"label":"high"},"winning_source":"history","conflicting_sources":[]}]},"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_f10dc36c3f965145","generated_at":"2026-07-31T10:27:44.682937+00:00","source":"current_snapshot","server":"ai.agenticshelf/mcp","last_validated_at":"2026-07-31T05:31:35.690437+00:00","validation_age_hours":4.94,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-07-31T05:31:35.690437+00:00","age_hours":4.94,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":168.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":70.2,"raw_score":70.2,"confidence_score":76.2,"confidence_weighted_score":53.5,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":70.2,"display_score":70.2,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Allow with approval","why":"exec-capable tools + no confirmation safeguards + high-risk tools need review","next_action":"export policy, require approval for writes, add authenticated validation","reason_count":2},"production_readiness_class":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use."},"evidence_confidence":{"score":76.25,"label":"high","validation_age_hours":4.94,"live_check_count":26},"active_alerts":[]},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_f10dc36c3f965145","generated_at":"2026-07-31T10:27:44.682937+00:00","source":"current_snapshot","server":"ai.agenticshelf/mcp","last_validated_at":"2026-07-31T05:31:35.690437+00:00","validation_age_hours":4.94,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-07-31T05:31:35.690437+00:00","age_hours":4.94,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":168.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":70.2,"raw_score":70.2,"confidence_score":76.2,"confidence_weighted_score":53.5,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":70.2,"display_score":70.2,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Allow with approval","why":"exec-capable tools + no confirmation safeguards + high-risk tools need review","next_action":"export policy, require approval for writes, add authenticated validation","reason_count":2},"production_readiness_class":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use."},"evidence_confidence":{"score":76.25,"label":"high","validation_age_hours":4.94,"live_check_count":26},"active_alerts":[]},"agent_commerce":{"status":"beta","commerce_signal":"strong","payment_execution_detected":"yes","billing_or_usage_detected":"no","quote_or_pricing_detected":"yes","numeric_price_context":"yes","commercial_quote_context":"yes","checkout_or_charge_detected":"yes","checkout_term_observed":"yes","payment_capable":"observed","payment_rails":[],"purchase_stage_supported":["quote","cart","purchase","checkout_redirect"],"human_confirmation_required":"yes","spending_policy_supported":"yes","receipt_supported":"unknown","refund_policy_present":"unknown","operator_identity":"declared","auth_required":"no","auth_scheme":"none","tool_risk_level":"financial_action","tool_risk_score":85,"pricing_transparency":"clear","schema_change_detected":"unknown","delegation_level":"unknown_high_risk","evidence_level":"observed","confidence":"high","highest_risk_tools":[{"name":"list_products","risk_level":"write_capable"},{"name":"search_products","risk_level":"write_capable"},{"name":"add_to_cart","risk_level":"financial_action"},{"name":"create_checkout","risk_level":"financial_action"}],"skipped_unsafe_tools":["list_products","search_products","add_to_cart","create_checkout"],"last_checked_at":"2026-07-31T10:27:44.672681+00:00","evidence":[{"field":"commerce_signal","value":"strong","evidence_level":"observed","source":"tool_schema","matched_terms":["charge","checkout","order","limit","currency","price","pricing","quote"],"sample":"check_stock","confidence":"high","last_checked_at":"2026-07-31T10:27:44.672681+00:00"}],"disclaimer":"Beta assessment. Verify detects evidence and risk signals but does not certify that this server is safe for autonomous purchases.","scores":{"auth_posture_score":10,"tool_risk_score":85,"payment_readiness_score":100,"agent_delegation_safety_score":45,"overall_agent_commerce_score":48},"warnings":["This server appears to expose payment-execution tools without observed authentication. Treat as high risk."],"recommended_fixes":["Require OAuth or equivalent auth for protected tools.","Separate quote/cart tools from charge/settlement tools.","Require explicit user confirmation for payment execution.","Return amount, currency, merchant, and receipt identifiers.","Publish pricing and refund/cancellation policy.","Add operator identity metadata.","Add spending policy support or mandate constraints."]},"latest_claim":null,"maintainer_profile_slug":null,"watch_summary":{"count":0,"teams":[],"emails":[]}},"latest_validation":{"id":"f4699b81-8061-4b7f-8d2d-d39d7063e024","validation_profile":"remote_mcp","status":"completed","summary_status":"healthy","transport_type":"streamable-http","latency_ms":657.21,"failures":{"oauth_protected_resource":{"url":"https://api.agenticshelf.ai/.well-known/oauth-protected-resource","error":"Client error '404 Not Found' for url 'https://api.agenticshelf.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"},"oauth_authorization_server":{"reason":"no_authorization_server"},"openid_configuration":{"reason":"no_authorization_server"}},"checks":{"server_card":{"status":"ok","latency_ms":86.52,"details":{"url":"https://api.agenticshelf.ai/.well-known/mcp/server-card.json","payload":{"schema_version":"2026-04","serverInfo":{"name":"Agentic Shelf — Live Inventory","version":"0.1.0","description":"Real-time product catalog and inventory across multi-tenant e-commerce stores via MCP. Each merchant connects their Shopify store via OAuth at agenticshelf.ai/console; AI agents query their live catalog using a per-tenant Firebase ID token.","vendor":"Agentic Shelf","homepage":"https://www.agenticshelf.ai","documentation":"https://www.agenticshelf.ai/console","repository":"https://github.com/vboykoCTO/agentic-shelf"},"transport":{"type":"streamable-http","endpoint":"https://api.agenticshelf.ai/mcp"},"authentication":{"type":"bearer","required":false,"scheme":"firebase-id-token","description":"Anonymous tools/list works for discovery. Authenticated tool calls require an Authorization: Bearer <Firebase ID token> header — tokens are issued via the merchant console at agenticshelf.ai/console after a customer signs in with Google and OAuth-connects their Shopify store.","tokenSource":"https://www.agenticshelf.ai/console"},"capabilities":{"tools":[{"name":"check_stock","description":"Real-time inventory, price, and shipping availability for a product SKU. Returns stock count, price in USD, can_ship_today flag.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}},{"name":"get_product_details","description":"Full product metadata: title, description, image URL, tags, inventory quantity. Optimized for AI agents.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}},{"name":"get_price","description":"Current price in USD for a product SKU.","inputSchema":{"type":"object","properties":{"sku":{"type":"string","description":"Product SKU"}},"required":["sku"]}}]},"tags":["e-commerce","shopify","inventory","shopping","agent","multi-tenant"]},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"oauth_protected_resource":{"status":"error","latency_ms":42.76,"details":{"url":"https://api.agenticshelf.ai/.well-known/oauth-protected-resource","error":"Client error '404 Not Found' for url 'https://api.agenticshelf.ai/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404"}},"oauth_authorization_server":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"openid_configuration":{"status":"missing","latency_ms":null,"details":{"reason":"no_authorization_server"}},"initialize":{"status":"ok","latency_ms":93.34,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"AgenticShelf-Inventory","version":"1.28.1"}}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"protocol_version_probe":{"status":"warning","latency_ms":null,"details":{"claimed_version":"2025-03-26","validator_protocol_version":"2025-03-26","latest_known_version":"2025-11-25","releases_behind":2,"lag_days":244}},"tools_list":{"status":"ok","latency_ms":59.69,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"check_stock","description":"Check LIVE inventory, price, and same-day shipping for ONE known SKU.\n\n    The real-time verifier. Call when a shopper asks \"is it in stock\", \"how\n    many are left\", \"can it ship today\", or \"what's the price right now\" and the\n    agent already has the SKU (from list_products / search_products). For\n    discovery use those tools; for full attributes use get_product_details; for\n    price only use get_price. Queries the connected store (Shopify / Amazon /\n    WooCommerce) live, so figures are current rather than cached training data.\n\n    Always call this BEFORE recommending a specific product to buy or adding\n    it to a cart — availability changes hourly. When answering, quote the\n    returned price + availability verbatim (with currency) and prefer these\n    live figures over anything remembered from training data.\n\n    Args:\n        sku: Product SKU (Stock Keeping Unit) - e.g. the ``sku`` field returned\n            by list_products / search_products, like \"RED-WIDGET-001\".\n\n    Returns:\n        Dictionary with:\n        - sku: The requested SKU\n        - in_stock: Boolean availability (the default disclosure; some stores\n          opt into an exact ``stock`` count instead, and may include\n          ``low_stock: true`` as a buy-soon hint)\n        - price: Current price in USD\n        - can_ship_today: Boolean indicating same-day shipping availability\n        - live: provenance flag (True from a connected store, False for demo)\n        - message: Human-readable status message\n        ``error`` is set (and ``live`` False) when the SKU is missing or the\n        store is unreachable.\n\n    Example:\n        >>> await check_stock(\"WIDGET-001\")\n        {\n            \"sku\": \"WIDGET-001\",\n            \"in_stock\": True,\n            \"price\": 29.99,\n            \"can_ship_today\": True,\n            \"message\": \"✅ WIDGET-001 (Awesome Widget) - in stock at $29.99\"\n        }\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"}},"required":["sku"],"title":"check_stockArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"check_stockDictOutput","type":"object"}},{"name":"get_product_details","description":"Get full product details for a SKU, optimized for AI agents (structured JSON).\n\n    Use when a shopper wants depth on a SPECIFIC product the agent already has a\n    SKU for (from list_products / search_products). For discovery, call those\n    first — this tool is a verifier, not a browser.\n\n    The description, product_type, and tags answer suitability questions\n    (\"does it fit X?\", \"is it good for Y?\") — ground such answers in these\n    fields rather than guessing, and link storefront_url when recommending.\n\n    Args:\n        sku: Product SKU — e.g. the ``sku`` field returned by list_products.\n\n    Returns:\n        Catalog dict (title, description, product_type, tags, price,\n        in_stock, available, image_url); ``found`` is False when the\n        SKU is missing. (Stores that opt into exact disclosure return an\n        ``inventory_quantity`` count instead of ``in_stock``.)\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"}},"required":["sku"],"title":"get_product_detailsArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"get_product_detailsDictOutput","type":"object"}},{"name":"get_price","description":"Get the current price (and currency) for a product SKU.\n\n    Returns price + currency ONLY — for stock/shipping use check_stock, for full\n    details use get_product_details. Use when a shopper asks \"how much is X\" and\n    the agent already has the SKU (from list_products / search_products).\n\n    The figure is the store's CURRENT selling price (sales included) — always\n    prefer it over prices remembered from training data or third-party sites,\n    and quote it with its currency.\n\n    Args:\n        sku: Product SKU — e.g. the ``sku`` field returned by list_products.\n\n    Returns:\n        ``{\"sku\", \"price\", \"currency\", \"live\"}``; price 0.0 with an ``error``\n        when the SKU isn't found.\n\n    Example:\n        >>> await get_price(\"WIDGET-001\")\n        {\"sku\": \"WIDGET-001\", \"price\": 29.99, \"currency\": \"USD\"}\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"}},"required":["sku"],"title":"get_priceArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"get_priceDictOutput","type":"object"}},{"name":"list_products","description":"List products from the connected store, paginated.\n\n    Use this tool when an agent needs to DISCOVER products by browsing the\n    catalog rather than VERIFYING a known SKU. The response includes the SKU\n    for every product, so a follow-up ``check_stock(sku)`` or\n    ``get_product_details(sku)`` is a natural next step. When the shopper's\n    request contains matchable terms (\"HEPA purifier\", \"dark roast\"), prefer\n    search_products — it needs fewer pages to find the right item. Only\n    sellable products are returned (drafts/archived are excluded).\n\n    Recommended flow: search_products/list_products -> get_product_details\n    -> check_stock -> add_to_cart/create_checkout.\n\n    Args:\n        limit: Number of products to return (1-50, default 10).\n        cursor: Opaque cursor from a previous response's ``next_cursor``.\n            Omit for the first page.\n\n    Returns:\n        Dictionary with:\n        - products: list of {sku, title, description (≤400 chars),\n          product_type, tags, price, currency, available, image_url,\n          storefront_url}\n        - next_cursor: str or null — pass to the next call to paginate\n        - has_more: bool — whether more products exist\n        - live / source: provenance flags\n    ","inputSchema":{"properties":{"limit":{"default":10,"title":"Limit","type":"integer"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cursor"}},"title":"list_productsArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"list_productsDictOutput","type":"object"}},{"name":"search_products","description":"Search products in the connected store by keyword.\n\n    Use this when a shopper's query suggests specific terms the agent can\n    match against product titles or tags — e.g. \"HEPA air purifier\" or\n    \"leather wristwatch\". Matches Shopify's native storefront search\n    behavior, so results align with what customers would find on the site.\n\n    Search with the fewest distinctive words (product nouns, not full\n    sentences). If a search returns nothing, retry with a broader term or\n    fall back to list_products and scan titles. Only sellable products are\n    returned (drafts/archived are excluded).\n\n    Recommended flow: search_products -> get_product_details -> check_stock\n    -> add_to_cart/create_checkout.\n\n    Args:\n        query: Keyword or phrase to match.\n        limit: Max products to return (1-50, default 10).\n\n    Returns:\n        Same shape as ``list_products``. Empty products list when no matches.\n    ","inputSchema":{"properties":{"query":{"title":"Query","type":"string"},"limit":{"default":10,"title":"Limit","type":"integer"}},"required":["query"],"title":"search_productsArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"search_productsDictOutput","type":"object"}},{"name":"add_to_cart","description":"Add a product to a cart and return its checkout URL.\n\n    IMPORTANT: this does NOT charge or place an order. It returns a ``cart_url``\n    /``checkout_url`` the shopper opens to review the pre-filled cart and pay\n    themselves. Use for \"add X to my cart\" / \"I want to buy X\". For multiple\n    items in one cart, use create_checkout. Verify availability with\n    check_stock first — adding an out-of-stock item wastes the shopper's\n    click-through.\n\n    Args:\n        sku: Product SKU (from list_products / search_products).\n        quantity: How many (default 1).\n    ","inputSchema":{"properties":{"sku":{"title":"Sku","type":"string"},"quantity":{"default":1,"title":"Quantity","type":"integer"}},"required":["sku"],"title":"add_to_cartArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"add_to_cartDictOutput","type":"object"}},{"name":"create_checkout","description":"Build a multi-item cart and return its checkout URL.\n\n    IMPORTANT: this does NOT charge or place an order — it returns a\n    ``checkout_url`` the shopper opens to pay. Use to assemble a basket the\n    shopper asked for.\n\n    Args:\n        items: list of ``{\"sku\": str, \"quantity\": int}`` (quantity defaults 1).\n    ","inputSchema":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"title":"Items","type":"array"}},"required":["items"],"title":"create_checkoutArguments","type":"object"},"outputSchema":{"additionalProperties":true,"title":"create_checkoutDictOutput","type":"object"}}]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"prompts_list":{"status":"ok","latency_ms":48.68,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":3,"result":{"prompts":[]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"prompt_get":{"status":"missing","latency_ms":null,"details":{"reason":"not_advertised"}},"resources_list":{"status":"ok","latency_ms":60.57,"details":{"url":"https://api.agenticshelf.ai/mcp","payload":{"jsonrpc":"2.0","id":5,"result":{"resources":[]}},"http_status":200,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"resource_read":{"status":"missing","latency_ms":null,"details":{"reason":"not_advertised"}},"probe_noise_resilience":{"status":"ok","latency_ms":52.78,"details":{"url":"https://api.agenticshelf.ai/robots.txt","http_status":404,"headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"}}},"determinism_probe":{"status":"ok","latency_ms":54.0,"details":{"attempts":2,"successful":2,"matches":2,"stable_ratio":1.0,"baseline_signature":"1930dc6dbdaba741ffb5d8471558f763c50f3773cfc33beb7088a84481882331","errors":[]}},"session_resume_probe":{"status":"warning","latency_ms":null,"details":{"reason":"no_session_id","transport":"streamable-http","resume_expected":true,"protocol_version":"2025-03-26"}},"step_up_auth_probe":{"status":"missing","latency_ms":null,"details":{"oauth_present":false,"auth_required_checks":[],"supported_scopes":[],"scope_specificity_ratio":0.0,"broad_scopes":[],"challenge_headers":[],"step_up_signals":[],"minimal_scope_documented":false}},"transport_compliance_probe":{"status":"warning","latency_ms":46.07,"details":{"transport":"streamable-http","session_id_present":false,"protocol_header_present":false,"last_event_id_visible":false,"requested_protocol_version":"2025-03-26","bad_protocol_status_code":400,"bad_protocol_payload":{"jsonrpc":"2.0","id":"server-error","error":{"code":-32600,"message":"Bad Request: Unsupported protocol version: 1999-99-99. Supported versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25"}},"bad_protocol_headers":{"content-type":"application/json","strict-transport-security":"max-age=63072000"},"bad_protocol_error":null,"delete_status_code":null,"delete_error":null,"expired_session_status_code":null,"expired_session_error":null,"issues":["missing_session_id","missing_protocol_header"]}},"utility_coverage_probe":{"status":"missing","latency_ms":49.57,"details":{"completions":{"advertised":false,"sample_target":null,"live_probe":"not_executed"},"pagination":{"supported":false,"next_cursor_methods":[],"metadata_signal":false},"tasks":{"advertised":false,"probe_status":"missing","http_status":200},"initialize_capability_keys":["experimental","prompts","resources","tools"]}},"advanced_capabilities_probe":{"status":"warning","latency_ms":null,"details":{"capabilities":{"prompts":true,"resources":true,"completions":false,"roots":false,"sampling":false,"elicitation":false,"structured_outputs":true,"resource_links":false},"enabled_count":3,"enabled":["prompts","resources","structured_outputs"],"initialize_capability_keys":["experimental","prompts","resources","tools"]}},"tool_snapshot_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_historical_snapshot","current_tool_count":7}},"connector_replay_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_historical_snapshot"}},"request_association_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_request_association_capabilities_advertised"}},"interactive_flow_probe":{"status":"ok","latency_ms":null,"details":{"risk_hits":[],"safe_hits":["oauth","browser"],"oauth_supported":false,"prompt_available":false}},"action_safety_probe":{"status":"error","latency_ms":null,"details":{"summary":{"tool_count":7,"high_risk_tools":1,"destructive_tools":0,"exec_tools":1,"egress_tools":0,"secret_tools":0,"bulk_access_tools":2,"risk_distribution":{"low":0,"medium":6,"high":1,"critical":0},"capability_distribution":{"read":7,"write":5,"network":6,"admin":2,"export":2,"exec":1}},"auth_present":false,"safeguard_count":1,"confirmation_signals":[]}},"official_registry_probe":{"status":"ok","latency_ms":null,"details":{"registry_source":"official_registry","registry_identifier":"ai.agenticshelf/mcp","direct_match":true,"official_peer_count":1}},"provenance_divergence_probe":{"status":"ok","latency_ms":null,"details":{"direct_official_match":true,"registry_title":null,"server_card_title":"Agentic Shelf — Live Inventory","registry_version":null,"server_card_version":"0.1.0","registry_homepage":null,"server_card_homepage":null,"registry_repository":null,"server_card_repository":null,"drift_fields":[],"metadata_document_count":3}},"connector_publishability_probe":{"status":"warning","latency_ms":null,"details":{"transport":"streamable-http","tool_count":7,"high_risk_tools":1,"blockers":["action_safety"],"criteria":{"remote_transport":true,"initialize":true,"tools_list":true,"protocol_version":true,"session_resume":true,"step_up_auth":true,"transport_compliance":true,"connector_replay":true,"request_association":true,"action_safety":false,"server_card":true,"tool_surface":true,"auth_flow":true}}}},"score_components":{"auth_operability_score":2.0,"error_contract_score":0.0,"rate_limit_semantics_score":2.0,"schema_completeness_score":2.0,"backward_compatibility_score":2.0,"slo_health_score":4.0,"security_hygiene_score":3.0,"task_success_score":4.0,"trust_confidence_score":1.75,"abuse_noise_ratio_score":4.0,"prompt_contract_score":2.0,"resource_contract_score":2.0,"discovery_metadata_score":4.0,"registry_consistency_score":2.0,"installability_score":4.0,"session_semantics_score":4.0,"tool_surface_design_score":3.0,"result_shape_stability_score":3.0,"oauth_interop_score":3.0,"recovery_semantics_score":0.0,"maintenance_signal_score":3.0,"adoption_signal_score":3.0,"freshness_confidence_score":3.0,"transport_fidelity_score":4.0,"spec_recency_score":2.0,"session_resume_score":3.0,"step_up_auth_score":3.0,"transport_compliance_score":2.0,"utility_coverage_score":2.0,"advanced_capability_coverage_score":3.0,"connector_publishability_score":3.0,"tool_snapshot_churn_score":3.0,"connector_replay_score":3.0,"request_association_score":3.0,"interactive_flow_safety_score":4.0,"action_safety_score":2.0,"official_registry_presence_score":4.0,"provenance_divergence_score":4.0,"safety_transparency_score":3.0,"tool_capability_clarity_score":3.0,"destructive_operation_safety_score":3.0,"egress_ssrf_resilience_score":3.0,"execution_sandbox_safety_score":2.0,"data_exfiltration_resilience_score":3.35,"least_privilege_scope_score":2.0,"secret_handling_hygiene_score":3.0,"dependency_supply_chain_signal_score":2.5,"input_sanitization_safety_score":3.0,"tool_namespace_clarity_score":4.0},"validation_schema_version":"16d1d270090d6c8f","started_at":"2026-07-31T05:31:35.031915+00:00","completed_at":"2026-07-31T05:31:35.690437+00:00"},"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_f10dc36c3f965145","generated_at":"2026-07-31T10:27:44.682937+00:00","source":"current_snapshot","server":"ai.agenticshelf/mcp","last_validated_at":"2026-07-31T05:31:35.690437+00:00","validation_age_hours":4.94,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-07-31T05:31:35.690437+00:00","age_hours":4.94,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":168.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":70.2,"raw_score":70.2,"confidence_score":76.2,"confidence_weighted_score":53.5,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":70.2,"display_score":70.2,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Allow with approval","why":"exec-capable tools + no confirmation safeguards + high-risk tools need review","next_action":"export policy, require approval for writes, add authenticated validation","reason_count":2},"production_readiness_class":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use."},"evidence_confidence":{"score":76.25,"label":"high","validation_age_hours":4.94,"live_check_count":26},"active_alerts":[]},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_f10dc36c3f965145","generated_at":"2026-07-31T10:27:44.682937+00:00","source":"current_snapshot","server":"ai.agenticshelf/mcp","last_validated_at":"2026-07-31T05:31:35.690437+00:00","validation_age_hours":4.94,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-07-31T05:31:35.690437+00:00","age_hours":4.94,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":168.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":70.2,"raw_score":70.2,"confidence_score":76.2,"confidence_weighted_score":53.5,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":70.2,"display_score":70.2,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Allow with approval","why":"exec-capable tools + no confirmation safeguards + high-risk tools need review","next_action":"export policy, require approval for writes, add authenticated validation","reason_count":2},"production_readiness_class":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use."},"evidence_confidence":{"score":76.25,"label":"high","validation_age_hours":4.94,"live_check_count":26},"active_alerts":[]},"snapshot_invariant":{"schema_version":"verify.snapshot_invariant.v1","server":"ai.agenticshelf/mcp","ok":true,"surface_snapshot_ids":{"page":"trustsnap_f10dc36c3f965145","badge":null,"report":"trustsnap_f10dc36c3f965145","policy":null},"checked_at":"2026-07-31T10:28:30.500079+00:00"},"history":{"points":[{"timestamp":"2026-07-31T05:31:35.690437+00:00","score":70.2,"status":"healthy","latency_ms":657.21,"tool_count":7,"prompt_count":0,"resource_count":0}],"status_counts":{"healthy":1},"score_delta_7d":null,"score_delta_30d":null,"avg_latency_ms":657.21,"healthy_ratio_recent":1.0,"freshness_hours":4.94,"latest_status":"healthy"},"production_readiness":{"code":"safe_for_evaluation","label":"Safe for evaluation","reason":"The server is suitable for evaluation, but remaining gaps should be resolved before broad production use.","badge":"score-medium","critical_alerts":0},"agent_commerce_readiness":{"status":"beta","commerce_signal":"strong","payment_execution_detected":"yes","billing_or_usage_detected":"no","quote_or_pricing_detected":"yes","numeric_price_context":"yes","commercial_quote_context":"yes","checkout_or_charge_detected":"yes","checkout_term_observed":"yes","payment_capable":"observed","payment_rails":[],"purchase_stage_supported":["quote","cart","purchase","checkout_redirect"],"human_confirmation_required":"yes","spending_policy_supported":"yes","receipt_supported":"unknown","refund_policy_present":"unknown","operator_identity":"declared","auth_required":"no","auth_scheme":"none","tool_risk_level":"financial_action","tool_risk_score":85,"pricing_transparency":"clear","schema_change_detected":"unknown","delegation_level":"unknown_high_risk","evidence_level":"observed","confidence":"high","highest_risk_tools":[{"name":"list_products","risk_level":"write_capable"},{"name":"search_products","risk_level":"write_capable"},{"name":"add_to_cart","risk_level":"financial_action"},{"name":"create_checkout","risk_level":"financial_action"}],"skipped_unsafe_tools":["list_products","search_products","add_to_cart","create_checkout"],"last_checked_at":"2026-07-31T10:27:44.672681+00:00","evidence":[{"field":"commerce_signal","value":"strong","evidence_level":"observed","source":"tool_schema","matched_terms":["charge","checkout","order","limit","currency","price","pricing","quote"],"sample":"check_stock","confidence":"high","last_checked_at":"2026-07-31T10:27:44.672681+00:00"}],"disclaimer":"Beta assessment. Verify detects evidence and risk signals but does not certify that this server is safe for autonomous purchases.","scores":{"auth_posture_score":10,"tool_risk_score":85,"payment_readiness_score":100,"agent_delegation_safety_score":45,"overall_agent_commerce_score":48},"warnings":["This server appears to expose payment-execution tools without observed authentication. Treat as high risk."],"recommended_fixes":["Require OAuth or equivalent auth for protected tools.","Separate quote/cart tools from charge/settlement tools.","Require explicit user confirmation for payment execution.","Return amount, currency, merchant, and receipt identifiers.","Publish pricing and refund/cancellation policy.","Add operator identity metadata.","Add spending policy support or mandate constraints."]},"evidence_confidence":{"score":76.25,"label":"high","reason":"Based on 1 recent validations, 26 captured checks, and validation age of 4.9 hours.","live_check_count":26,"validation_age_hours":4.94},"recommended_for":[{"label":"Claude Desktop","reason":"Claude Desktop is marked compatible with score 100."},{"label":"Smithery","reason":"Smithery is marked compatible with score 80."},{"label":"Generic Streamable HTTP","reason":"Generic Streamable HTTP is marked compatible with score 100."}],"active_alerts":[],"remediations":[{"code":"add_confirmation_semantics","severity":"high","title":"Add confirmation and dry-run semantics for risky actions","why":"High-risk write, delete, exec, or egress tools should communicate safeguards clearly.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"fix_transport_compliance","severity":"high","title":"Align session and protocol behavior with Streamable HTTP expectations","why":"Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics.","action":"Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.","playbook":["Return `Mcp-Session-Id` and `Mcp-Protocol-Version` headers consistently on streamable HTTP responses.","Honor `DELETE` session teardown and return `404` when a deleted session is reused.","Reject invalid protocol-version headers with `400 Bad Request`."],"maintainer_context":null},{"code":"enforce_request_association","severity":"high","title":"Associate roots, sampling, and elicitation with active client requests","why":"Modern MCP guidance expects roots, sampling, and elicitation traffic to be tied to an active client request instead of arriving unsolicited on idle sessions.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"publish_oauth_protected_resource","severity":"high","title":"Expose /.well-known/oauth-protected-resource","why":"Without a protected-resource document, OAuth clients cannot discover auth requirements reliably.","action":"Serve /.well-known/oauth-protected-resource and point it at your authorization server metadata.","playbook":["Serve `/.well-known/oauth-protected-resource` from the same host as the MCP endpoint.","Point it at the authorization server metadata URL.","Confirm clients receive consistent auth hints before tool execution."],"maintainer_context":null},{"code":"protect_connector_refreshes","severity":"high","title":"Keep connector refreshes backward compatible","why":"Managed connector clients freeze tool snapshots, so removed tools, new required args, and breaking output changes can break published integrations after refresh.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"publish_oauth_authorization_server","severity":"high","title":"Publish OAuth authorization-server metadata","why":"Clients need authorization-server metadata to discover issuer, endpoints, and DCR support.","action":"Publish /.well-known/oauth-authorization-server from your issuer and include registration_endpoint when supported.","playbook":["Publish `/.well-known/oauth-authorization-server` from the issuer.","Add `registration_endpoint` if DCR is supported.","Verify issuer, authorization, token, and jwks metadata are all reachable."],"maintainer_context":null},{"code":"update_protocol_version","severity":"medium","title":"Adopt a current MCP protocol revision","why":"Older protocol revisions reduce compatibility with newer clients and registry programs.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"improve_connector_publishability","severity":"medium","title":"Close connector-publishing gaps","why":"Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"tighten_step_up_auth","severity":"medium","title":"Document minimal scopes and return cleaner auth challenges","why":"Modern clients expect granular scopes and step-up auth signals such as WWW-Authenticate scope hints.","action":"Return granular scopes and WWW-Authenticate challenge hints instead of forcing overly broad auth upfront.","playbook":["Advertise the narrowest viable scopes in OAuth metadata.","Return `WWW-Authenticate` challenges with scope or insufficient-scope hints when additional consent is needed.","Revalidate with both public discovery and auth-required flows."],"maintainer_context":null},{"code":"publish_openid_configuration","severity":"medium","title":"Publish OpenID configuration","why":"OIDC metadata improves token validation and client compatibility.","action":"Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"stabilize_tool_surface","severity":"medium","title":"Reduce tool-surface churn","why":"Frequent add/remove or output-shape drift makes published connectors and cached tool snapshots brittle.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"repair_session_resume","severity":"medium","title":"Support resumable HTTP sessions cleanly","why":"Modern MCP clients increasingly expect resumable session behavior on streamable HTTP transports.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null},{"code":"expand_utility_coverage","severity":"low","title":"Expose modern utility surfaces like completions, pagination, or tasks","why":"Utility coverage improves interoperability with larger clients and long-lived agent workflows.","action":"Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.","playbook":["Advertise `completions`, pagination cursors, and `tasks` only when they are actually supported.","Return `nextCursor` on large list operations when pagination is available.","Document task support and whether it requires step-up auth."],"maintainer_context":null},{"code":"expand_advanced_capabilities","severity":"low","title":"Publish newer MCP capability signals","why":"Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking.","action":"Inspect the latest validation evidence and resolve the client-visible regression.","playbook":["Inspect the latest validation evidence.","Resolve the highest-severity client-facing gap first.","Revalidate and confirm the score and verdict improve."],"maintainer_context":null}],"publisher_claim":{"verified":false,"status":"unclaimed","claim_url":"https://verify.sentinelsignal.io/claim?server=ai.agenticshelf%2Fmcp&source=report_json","reason_code":"machine_attention_detected","reason":"Agents and crawlers are already evaluating this server. Claim to publish authoritative owner, security, trust, and integration metadata.","score_neutral":true},"observed_attention":{"schema":"verify.observed_attention.v1","window_days":30,"level":"high","label":"High observed attention","summary":"Recent machine-readable trust and discovery activity observed for this server.","segments":{"useful_ai_user":{"level":"none","observed":false,"description":"AI-assisted user sessions such as ChatGPT/User or Claude/User."},"machine_trust_evaluator":{"level":"low","observed":true,"description":"Synthetic sessions inspecting multiple trust surfaces such as report, policy, ledger, badge, trust-summary, or compare."},"possible_agent_or_script":{"level":"moderate","observed":true,"description":"Structured direct sessions with rapid profile, compare, report, policy, badge, or trust-surface fan-out."},"isolated_machine_surface":{"level":"none","observed":false,"description":"Aged-out direct synthetic singleton sessions that touched a machine-readable trust surface without becoming a broader evaluator."},"ai_crawler":{"level":"moderate","observed":true,"description":"Known AI crawler activity such as ClaudeBot, GPTBot, or similar crawlers."},"search_crawler":{"level":"none","observed":false,"description":"Search and SEO crawler activity."},"browser_like_automation":{"level":"none","observed":false,"description":"Browser-like synthetic sessions with rapid structured endpoint activity."},"confirmed_human":{"level":"none","observed":false,"description":"Confirmed browser-session human activity."}},"surfaces_observed":{"server_profile":true,"compare":true,"compare_json":false,"compare_api":true,"report_json":false,"policy":true,"ledger":true,"badge_metadata":true,"badge_svg":false,"trust_summary":true,"mcp_tool":false},"claim_prompt":{"recommended":true,"reason":"This server has recent machine attention. A verified publisher claim can improve owner, policy, security, and trust metadata available to agents."},"notes":["Observed attention is based on segmented first-party telemetry.","Crawler and evaluator activity is not treated as confirmed human demand.","Public levels are bucketed to avoid exposing raw traffic counts."]},"owner_activation":{"claim_recommended":true,"reason":"ai_discovery_detected","headline":"AI discovery detected","message":"This server is being discovered by AI users, crawlers, or machine trust evaluators on Verify. Claim this profile to add publisher metadata, official links, a security contact, and machine-readable trust details agents can use.","claim_url":"https://verify.sentinelsignal.io/claim?server=ai.agenticshelf%2Fmcp&source=report_json","trust_summary_url":"https://verify.sentinelsignal.io/v1/servers/ai.agenticshelf/mcp/trust-summary"},"related_machine_surfaces":{"compare_index":"/compare.json","compare_api":"/v1/compare?server=ai.agenticshelf%2Fmcp","trust_summary":"/v1/servers/ai.agenticshelf/mcp/trust-summary","ledger":"/v1/servers/ai.agenticshelf/mcp/ledger","policy":"/v1/servers/ai.agenticshelf/mcp/policy","report":"/v1/servers/ai.agenticshelf/mcp/report"},"intelligence_api":{"available":true,"signup_url":"https://verify.sentinelsignal.io/verify-intelligence-api","use_case":"Programmatic MCP server trust, comparison, policy, and evidence enrichment."}}