audited Sep 1, 2026in 14s
92/ 100100% of the applicable check weight evaluated

4 tools registered. Strongest in shared experience, weakest in trust.

Shared experience100
Task completion100
Tool quality87
Trust75
https://shifenxiyin.com
Captured view of https://shifenxiyin.com

Tools

4 read, 0 write
Loading map
search_episodes: warning

search_episodes

Search the published episodes of "十分吸引" by meaning or keyword. Retrieval is hybrid — a meaning-based (semantic) pass plus a keyword pass over transcripts and episode titles/descriptions, fused together — so you need no special query syntax or boolean operators. Phrase a concept as a natural-language question; for a specific name or term, pass just that term. Returns the most relevant episodes (or none, if nothing on the show is relevant), each with quoted transcript segments cited by timestamped links — answer from those, and cite each quote you use with its timestamped link (e.g. [12:03](URL)). To follow up within specific episodes, pass their ids (from a prior result) as `episodeIds`. Searches the WHOLE show — the filters currently applied to the page do not narrow it (use filter_episodes and list_episodes for the filtered view). This surface serves at most 20 episodes with up to 3 quoted segments each, so topK and maxSegmentsPerEpisode can only trim that — they cannot raise it.Answers a question. Declared read only.
pagehttps://shifenxiyin.com/
implementation
viaimperative
entry pointdocument
registered after676ms
executepresent
api surface
queryrequired
topKoptional
maxSegmentsPerEpisodeoptional
includeTextoptional
fastoptional
episodeIdsoptional
annotations
read onlytrue
untrusted contenttrue
titlenot declared
2 findings
warningSchema quality
weight 4
3 of 4 tool schemas are harder for an agent to use than they need to be: search_episodes description is 995 characters, over Chrome's 500-character guidance.
search_episodes: description is 995 characters, over Chrome's 500-character guidance; search_episodes: 3 parameter descriptions are over Chrome's 150-character guidance; filter_episodes: description i
fix
{
  name: "search_episodes",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningInjection surface
weight 4
3 of 4 tools carry instruction-shaped text in their own metadata: search_episodes The description instructs the agent on how to answer and cite..
search_episodes: The description instructs the agent on how to answer and cite.; list_episodes: The description instructs the agent on when to use the tool.; open_episode: The description instructs the agent on which episode to open.
fix
{
  name: "search_episodes",
  // Metadata DESCRIBES the tool - it never addresses the agent reading it.
  // Rewrite any name, description, title, or schema field description that
  // instructs the agent (which tool to prefer, what to output, rules to
  // ignore) so it states what the tool does and what it returns instead.
  description: "Searches the catalog and returns matching items with prices."
}
tool json
{
  "name": "search_episodes",
  "description": "Search the published episodes of \"十分吸引\" by meaning or keyword. Retrieval is hybrid — a meaning-based (semantic) pass plus a keyword pass over transcripts and episode titles/descriptions, fused together — so you need no special query syntax or boolean operators. Phrase a concept as a natural-language question; for a specific name or term, pass just that term. Returns the most relevant episodes (or none, if nothing on the show is relevant), each with quoted transcript segments cited by timestamped links — answer from those, and cite each quote you use with its timestamped link (e.g. [12:03](URL)). To follow up within specific episodes, pass their ids (from a prior result) as `episodeIds`. Searches the WHOLE show — the filters currently applied to the page do not narrow it (use filter_episodes and list_episodes for the filtered view). This surface serves at most 20 episodes with up to 3 quoted segments each, so topK and maxSegmentsPerEpisode can only trim that — they cannot raise it.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "minLength": 1,
        "maxLength": 500,
        "description": "What to search for. Ask a natural-language question for a concept, or pass a specific name/term for an exact lookup — no special operators needed."
      },
      "topK": {
        "default": 10,
        "description": "Maximum number of episodes to return, ranked most-relevant first (max 50).",
        "type": "integer",
        "minimum": 1,
        "maximum": 50
      },
      "maxSegmentsPerEpisode": {
        "default": 3,
        "description": "Quoted transcript segments to include per episode — the main token dial (max 20). Raise it when scoping to a single episode (episodeIds) to get more of its moments.",
        "type": "integer",
        "minimum": 1,
        "maximum": 20
      },
      "includeText": {
        "default": true,
        "description": "Include the quoted segment text. Set false for a lighter list of episodes + citations.",
        "type": "boolean"
      },
      "fast": {
        "default": false,
        "description": "Skip the semantic pass for a cheaper, faster keyword-only search. Best for specific term/name lookups; natural-language questions lose recall without it.",
        "type": "boolean"
      },
      "episodeIds": {
        "description": "Restrict the search to specific episodes by id — pass the episodeId(s) from a prior result to follow up within those episodes. Omit to search the whole channel.",
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "required": [
      "query"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true,
    "untrustedContentHint": true
  }
}
Showing search_episodes

Findings

Shared experience

100 / 100 · weight 30
passPage experience
weight 20
The page a person sees holds up next to the agent surface: a working interface, visible actions, readable content, nothing in the way.
passHuman parity
weight 10
The person co-browsing can see and use this page - the same page the agent's tools act on.

Task completion

100 / 100 · weight 25
passTool selection
weight 15
An agent chose an existing, callable tool and built a schema-valid call for all 3 canonical intents, each matching the kind of tool its intent needs. Nothing was executed, so this verifies selection, not outcomes.
not applicableCoverage vs. site type
weight 10
This tool set does not place the site in a category with a known expected tool shape, so there is no coverage baseline to score it against.

Tool quality

87 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 684ms of navigation.
toolopen_episode
passCanonical entry point
weight 3
All 4 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 4 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
3 of 4 tool schemas are harder for an agent to use than they need to be: search_episodes description is 995 characters, over Chrome's 500-character guidance.
toolsearch_episodes
search_episodes: description is 995 characters, over Chrome's 500-character guidance; search_episodes: 3 parameter descriptions are over Chrome's 150-character guidance; filter_episodes: description i
fix
{
  name: "search_episodes",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 1 name does not start with a verb (open_episode).
toolopen_episode
fix
{ name: "open_episode" /* short, unique, verb-based */ }
passStub detection
weight 4
All 4 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 4 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

75 / 100 · weight 20
passAnnotations present
weight 6
All 3 read-shaped tools declare readOnlyHint: true - the one declared claim that lets an agent treat a call as safe to make without asking.
passAnnotation mismatch
weight 6
No tool claims to be read-only while its own name or description says it writes (4 declared hints checked).
not applicableUntrusted content hint
weight 4
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
warningInjection surface
weight 4
3 of 4 tools carry instruction-shaped text in their own metadata: search_episodes The description instructs the agent on how to answer and cite..
toolsearch_episodes
search_episodes: The description instructs the agent on how to answer and cite.; list_episodes: The description instructs the agent on when to use the tool.; open_episode: The description instructs the agent on which episode to open.
fix
{
  name: "search_episodes",
  // Metadata DESCRIBES the tool - it never addresses the agent reading it.
  // Rewrite any name, description, title, or schema field description that
  // instructs the agent (which tool to prefer, what to output, rules to
  // ignore) so it states what the tool does and what it returns instead.
  description: "Searches the catalog and returns matching items with prices."
}

Tool selection

100% across 3 intents
I want to search episodes on this site.ok
chosesearch_episodesexpected search episodeskind matched
arguments
{
  "query": ""
}
I want to filter episodes on this site.ok
chosefilter_episodesexpected filter episodeskind matched
arguments
{}
I want to list episodes on this site.ok
choselist_episodesexpected list episodeskind matched
arguments
{}
model: gemini-2.5-flash

Add the tools this site is missing

Our scanner reads your website and suggests the right WebMCP tools for it.
Reads the site's public pages; takes a few seconds.
The open source webmcp plugin teaches your coding agent to audit a site, implement tools on document.modelContext, and verify them in a real browser. npx @ora-ai/webmcp-verify runs the verification on its own. No signup, no hosted service.
how this was captured
observed via
capture shim (Chromium 148.0.7778.96)
chrome
148.0.7778.96
capture shim
v1
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
4
run time
14s
finished
Sep 1, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.