← WebMCP Directory

Tool tree

shifenxiyin.com

Media & PersonalTools verified
Website
shifenxiyin.com exposes WebMCP tools to AI agents.
Explore capabilities

    page: Home

    search_episodesAnswer

    Search the published episodes of "十分吸引". Retrieval is hybrid — semantic plus keyword over transcripts, titles and descriptions — so plain language works. Returns the most relevant episodes (or none), each with quoted transcript segments; answer from the quotes and cite each with its timestamped link, e.g. [12:03](URL). Covers the whole show, not the page's filters. It serves at most 20 episodes × 3 segments — the dials only trim that.

    View tool JSON
    {
      "name": "search_episodes",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search the published episodes of \"十分吸引\". Retrieval is hybrid — semantic plus keyword over transcripts, titles and descriptions — so plain language works. Returns the most relevant episodes (or none), each with quoted transcript segments; answer from the quotes and cite each with its timestamped link, e.g. [12:03](URL). Covers the whole show, not the page's filters. It serves at most 20 episodes × 3 segments — the dials only trim that.",
      "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 per episode — the main token dial (max 20). Raise it when scoping to one episode with episodeIds.",
            "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 faster, cheaper keyword-only search. Good for exact term/name lookups; a natural-language question loses recall.",
            "type": "boolean"
          },
          "episodeIds": {
            "description": "Restrict the search to specific episodes — pass episodeId(s) from a prior result to follow up within them. Omit to search the whole show.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    filter_episodesAction

    Drive the episode list on screen: filter by topic, person, mention, collection or year, and set the sort order. Pass names as the filter rail shows them, not ids. Call with no arguments to read back the values this show offers and what is already applied. Facets you name are replaced; ones you omit are left alone, so you can refine in steps. The page and its URL change in front of the person watching. Returns the filters in effect and how many episodes match.

    View tool JSON
    {
      "name": "filter_episodes",
      "kind": "act",
      "impl": "imperative",
      "description": "Drive the episode list on screen: filter by topic, person, mention, collection or year, and set the sort order. Pass names as the filter rail shows them, not ids. Call with no arguments to read back the values this show offers and what is already applied. Facets you name are replaced; ones you omit are left alone, so you can refine in steps. The page and its URL change in front of the person watching. Returns the filters in effect and how many episodes match.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "topics": {
            "description": "Topic names to filter by (any of them matches). [] drops the filter.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "people": {
            "description": "Names of people to filter by (any of them matches). [] drops the filter.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "mentions": {
            "description": "Companies or products the show talks about (any of them matches). [] drops it.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "collection": {
            "description": "A collection/playlist title to narrow to; null drops it.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "year": {
            "description": "Publication year to narrow to; null drops it.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": -9007199254740991,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "sort": {
            "description": "Order of the list.",
            "type": "string",
            "enum": [
              "newest",
              "popular",
              "longest",
              "oldest"
            ]
          },
          "clear": {
            "description": "Drop every existing filter before applying this call.",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    list_episodesAnswer

    Read back the episodes this page is currently showing, in the order they appear, with their ids. Reflects whatever filters, sort, or search the page has applied right now, and costs no network request. Use it after filter_episodes to see what the person is looking at, and to get the episodeId that open_episode takes.

    View tool JSON
    {
      "name": "list_episodes",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read back the episodes this page is currently showing, in the order they appear, with their ids. Reflects whatever filters, sort, or search the page has applied right now, and costs no network request. Use it after filter_episodes to see what the person is looking at, and to get the episodeId that open_episode takes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "limit": {
            "default": 20,
            "description": "Rows to return from the top of the list (max 50).",
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    open_episodeAction

    Navigate this page to one episode's own page, where its transcript, chapters and moments live. Takes an episodeId from list_episodes or search_episodes. This MOVES the person's browser, so open the episode they asked for, not one you are guessing at.

    View tool JSON
    {
      "name": "open_episode",
      "kind": "act",
      "impl": "imperative",
      "description": "Navigate this page to one episode's own page, where its transcript, chapters and moments live. Takes an episodeId from list_episodes or search_episodes. This MOVES the person's browser, so open the episode they asked for, not one you are guessing at.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "episodeId": {
            "type": "string",
            "minLength": 1,
            "description": "The episodeId of the episode to open, as returned by the other tools."
          }
        },
        "required": [
          "episodeId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }

    page: Page

    read_episodeAnswer

    Read what this episode page is showing: the episode of "十分吸引" it presents — summary, speakers, the chapter & key-moment outline with timestamps — plus where playback currently is. Costs no network request. Start here: the timestamps it returns are what play_moment and read_transcript take.

    View tool JSON
    {
      "name": "read_episode",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read what this episode page is showing: the episode of \"十分吸引\" it presents — summary, speakers, the chapter & key-moment outline with timestamps — plus where playback currently is. Costs no network request. Start here: the timestamps it returns are what play_moment and read_transcript take.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/27ffe5c3-79d8-410b-88d6-8dd7a004cf3a"
    }
    search_transcriptAction

    Find exact text in this episode's transcript and highlight it in the transcript panel the person is looking at — the page and its match counter visibly change. Exact substring matching (case-insensitive), not semantic search: pass a short phrase or a name, not a question. Returns each match with a timestamped citation link. Pass an empty query to clear the highlights.

    View tool JSON
    {
      "name": "search_transcript",
      "kind": "act",
      "impl": "imperative",
      "description": "Find exact text in this episode's transcript and highlight it in the transcript panel the person is looking at — the page and its match counter visibly change. Exact substring matching (case-insensitive), not semantic search: pass a short phrase or a name, not a question. Returns each match with a timestamped citation link. Pass an empty query to clear the highlights.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "The exact text to find in the transcript. An empty string clears the search."
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "page": "/27ffe5c3-79d8-410b-88d6-8dd7a004cf3a"
    }
    read_transcriptAnswer

    Read this episode's transcript as speaker-labelled, timestamped text. Scope it to a chapter by title, or to a startMs/endMs window (timestamps from the other tools); no scope reads from the beginning. Long windows are truncated at maxChars and the answer says which startMs continues the read.

    View tool JSON
    {
      "name": "read_transcript",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read this episode's transcript as speaker-labelled, timestamped text. Scope it to a chapter by title, or to a startMs/endMs window (timestamps from the other tools); no scope reads from the beginning. Long windows are truncated at maxChars and the answer says which startMs continues the read.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "chapter": {
            "description": "A chapter title (as read_episode lists them) to read in full.",
            "type": "string"
          },
          "startMs": {
            "description": "Window start in ms. Ignored when chapter is given. Default 0.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "endMs": {
            "description": "Window end in ms. Ignored when chapter is given. Default: episode end.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "maxChars": {
            "default": 4000,
            "description": "Transcript characters to return per call (max 12000).",
            "type": "integer",
            "minimum": 200,
            "maximum": 12000
          }
        },
        "additionalProperties": false
      },
      "page": "/27ffe5c3-79d8-410b-88d6-8dd7a004cf3a"
    }
    play_momentAction

    Seek this page's player to a position and start playback — the person hears the episode from there, and the word-synced transcript follows. Takes the millisecond positions the other tools return. Use it when they ask to hear a moment, not speculatively: it audibly starts playback in their browser.

    View tool JSON
    {
      "name": "play_moment",
      "kind": "act",
      "impl": "imperative",
      "description": "Seek this page's player to a position and start playback — the person hears the episode from there, and the word-synced transcript follows. Takes the millisecond positions the other tools return. Use it when they ask to hear a moment, not speculatively: it audibly starts playback in their browser.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "positionMs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Where to play from, in milliseconds — the `ms` values read_episode, search_transcript and read_transcript return."
          }
        },
        "required": [
          "positionMs"
        ],
        "additionalProperties": false
      },
      "page": "/27ffe5c3-79d8-410b-88d6-8dd7a004cf3a"
    }