Shorti
Server Details
What short-form formats to shoot this week, how their hits were made, and a check of your take.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 9 tools
Most tools target distinct resources: shorti_format vs shorti_video (format vs single video), and the three campaign tools split board/draft/for_me cleanly. shorti_find and shorti_what_to_shoot overlap somewhat (both surface formats), but the descriptions distinguish search-by-query from the weekly curated feed.
All nine tools use the consistent shorti_ prefix with snake_case verb/noun or noun patterns (shorti_find, shorti_format, shorti_video, shorti_check_link, shorti_edit_recipe). No convention mixing; predictable and readable throughout.
Nine tools is well within the ideal 3-15 range and each maps to a clear capability: discovery, format/video detail, editing, checking, and three campaign operations. No redundant or filler tools.
The surface covers discovery (find, what_to_shoot), detail (format, video), creation/editing (edit_recipe, check_link), and the campaign lifecycle (draft, board, for_me). Minor gaps exist—no explicit update/delete for campaigns or a way to publish—but core creator and brand workflows are covered.
Available Tools
9 toolsshorti_campaign_boardShorti Campaign BoardARead-onlyInspect
A brand's campaign board as aggregates. No argument: a link the brand opens signed in; nothing is read until it taps «보드를 AI 대화에 보내기» («Send the board to AI chat») on one campaign. Then call with the token: waiting until sent, then shared: submissions by format, the checks' verdicts, posts, and the views' median at 3, 7 and 21 days with the n of posts read at each age. No creator's name, answers, place or account is in it.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds meaningful context beyond that: nothing is read until the user taps the send button, and the output deliberately excludes creator names, answers, place and account. The waiting/shared status semantics add further behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is dense and mostly earns its place, but it is front-loaded awkwardly with the link/token mechanics before the core purpose, and the Korean/English interleaving makes it harder to scan. It reads as one run-on block rather than a clearly structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the annotations cover the safety profile. The description still covers the gating workflow, the two states, and the privacy boundary, leaving little an agent needs unaccounted for apart from token format details and sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single token parameter, so the description must carry the load. It does explain the token's role (obtained from the signed-in link, yields waiting then shared states), which is more than the schema provides, but it never clarifies format, lifetime, or what null/omitted token returns beyond the link.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states the resource (a brand's campaign board) and the aggregated payload (submissions by format, verdicts, posts, view medians at 3/7/21 days), so an agent can infer what comes back. But there is no clean verb, and the purpose is entangled with a two-phase link/token flow, making it harder to parse than a direct 'retrieves X' statement. It does not distinguish itself from siblings like shorti_campaigns_for_me or shorti_campaign_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use guidance: call it with no argument to get a link the brand opens signed in, then call with the token once the user taps the send button. It also explains the two response states (waiting then shared), which tells the agent exactly how to sequence calls. It stops short of naming alternative sibling tools for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_campaign_draftShorti Campaign DraftCRead-onlyIdempotentInspect
Start a campaign (체험단) from a product line: the formats whose idea card says how a product sits in their videos («브랜드라면», product_line in Korean and English), scored by the product's own words (draft.v0: 3 in the format's product line, 2 in its idea or an example; 2 or more fits), with compose — the composer's address filled with the first three — that the brand opens signed in to make the campaign itself. Nothing is written.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| product | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The trailing 'Nothing is written' corroborates the readOnly/idempotent annotations rather than contradicting them, and the description adds the scoring behavior (3/2 points, 2+ fits) beyond structured data. However it omits what is actually returned or how the first-three selection works.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single run-on sentence stacking nested clauses, backticks and parentheticals, so it is hard to parse despite being short. The core action is front-loaded, but every subsequent clause is jargon that resists comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, but for a tool with 0% schema coverage and opaque terminology, the agent is missing parameter meaning and usage routing. The description is too cryptic to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, but it never explains the two params directly. It hints at a product-line concept in Korean/English and a limit via 'first three', but neither `product` nor `limit` is defined in terms an agent can act on.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause 'Start a campaign (체험단) from a product line' gives a clear verb+resource, but the rest of the sentence dissolves into unexplained jargon (`draft.v0`, `compose`, scoring rules) that obscures what the tool actually produces. It never distinguishes itself from siblings like shorti_campaign_board or shorti_campaigns_for_me.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the campaign siblings, nor any prerequisite (the mention of a signed-in brand is buried and ambiguous). Conditions for selecting it over shorti_campaign_board are left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_campaigns_for_meShorti Campaigns For MeARead-onlyInspect
Campaigns (체험단) that fit this creator, and the order to shoot each one's formats. No argument: a link — link (link_en for the English page), token, expires_at (24 h) — that the person opens on their phone, signed in; nothing of theirs is read until they tap «AI 대화에 보내기» («Send to AI chat») under «나에게 맞는 체험단». Then call with the token alone: waiting (ask again after poll_after_s) until they send, then shared: each campaign with what the brand wrote, distance (whole km), reasons (why it fits, ko/en), cautions, the short invite link, and formats in the person's order, each with shoot_first and the references in order (their public pages; shorti_format and shorti_video read any of them). The order is a rule (match.v1), never a forecast of views.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations it adds real behavioral signal: the link/token is signed-in and expires in 24 h, nothing of the person's is read until an explicit user tap, and there is a two-phase `waiting`→`shared` state machine with a poll_after_s backoff. It stops short of describing failure/expiry handling, but this is meaningful disclosure the annotations alone don't provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The intent is front-loaded, but the prose is an over-dense run-on of em-dashes, parentheses and inline Korean, packing the state machine and output fields into two sprawling sentences. Every fragment carries content, yet the packaging makes it hard to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-phase tool this is fairly complete: it covers both call modes, the polling cadence, and the shape of the `shared` payload. Since an output schema exists, the enumerated return fields (distance, reasons, cautions, formats, shoot_first, references) are more redundant than necessary, but they don't hurt completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains that the first call takes no argument and that subsequent calls pass `token` alone. It even clarifies where the token comes from (the link payload), which the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (체험단 campaigns matching this creator) and what it returns (the shooting order for each campaign's formats), so an agent can grasp the intent. It does not, however, contrast itself with siblings such as shorti_campaign_board or shorti_what_to_shoot, leaving differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit procedural context: call with no argument to get the link, have the person tap «AI 대화에 보내기», then call again with the token alone, polling after poll_after_s while status is `waiting`. That is clear usage context, but it never states when to prefer this over the sibling campaign tools or what to do if the person declines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_check_linkCheck a takeARead-onlyInspect
A check link for a person's own video, and the summary they send back. No argument, or format (a format_id): a link at once — check_link (check_link_en for the English page), token, expires_at (24 h) and says — that the person opens on their phone to upload their own video and check it against that format. Nothing is read of theirs, written or queued, and you never see their video. Then call again with the token alone: waiting (ask again after poll_after_s) until the person taps «Send this result to the AI chat» («이 결과를 AI 대화에 보내기» on the Korean page) on their result, then shared with the summary they sent: fidelity with its interval and how many axes were measured (measured of of, weighted) — its value stays null with reason not_validated until its registered validity look passes, with followed (k of n directions repeated across formats that the video follows) in its place — up to three fixes at their moment (at_s, what_ko, how_ko, the hit video's public still; where a fix was drawn, its layers: the hits' still at still_url, its shapes and zone, the take's own shapes, each drawn value's evidence — hosts that draw show them in the check's view), what they broke and kept, and their result's link (link, link_en); each line in English beside the Korean where Shorti wrote one (what_en, how_en, broken_en, kept_en). A token this door did not sign, or one past its 24 h with nothing sent, is refused as handoff_invalid; a summary sent after the 24 h is still read. 증거가 붙은 관찰로 말하고, 원인은 검증된 것만. 닮은 정도는 조회수 예측이 아니다. — Speak in observations that carry their evidence, and name a cause only where one was verified; fidelity is not a forecast of views.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No | The token a previous call gave. | |
| format | No | A format_id to check against. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description adds real behavioral context: 'Nothing is read of theirs, written or queued, and you never see their video,' the 24 h token lifetime, the `handoff_invalid` refusal for unsigned/expired tokens while a late-sent summary is still read, and the polling contract. These details are not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The body is a dense, comma-spliced run-on that buries the state machine inside an enumeration of every return field. Since an output schema already exists, the long walkthrough of `says`, `measured`, `weighted`, `followed`, `layers`, `what_ko`, etc. is largely redundant and hurts parseability. Front-loading is weak – the actionable steps should lead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The handoff/polling lifecycle is covered, which is the hard part, but the description spends its length re-listing output fields already carried by the output schema and omits the practical basics (permissions, what happens on a second expiry, rate limits). Adequate on flow, bloated where it does not need to be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds meaning the schema does not: it clarifies the mutually exclusive calling modes (no argument vs. `format` on the first call, `token` alone on the second) and the 24 h validity of the token. That is meaningfully more than the raw field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening fragment 'A check link for a person's own video, and the summary they send back' does identify the resource, but the elliptical phrasing makes the core action hard to extract on first read. It never names or differentiates itself from any sibling tool (shorti_video, shorti_format, etc.), so an agent cannot tell from the text alone which tool to reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-phase flow is spelled out: call with no argument or a `format` to get a link, then call again with the `token` alone and poll while `waiting` (respecting `poll_after_s`) until `shared`. That is genuinely useful sequencing guidance. It stops short of naming alternatives or when *not* to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_edit_recipeEdit recipeCRead-onlyIdempotentInspect
A format's edit for an agent's editor: slots, cuts on the beat, captions, the check. format_id (from shorti_what_to_shoot, shorti_find or shorti_format): the format's compiled plan as the creator's editing agent takes it, for any editing tool or MCP it calls (trim, split, reorder, speed, captions, export). recipe is shorti.edit_recipe.v1: canvas (9:16) and length_ms; slots in order on the reference hit's own clock — what each shows (ko and en) and its frame where the plan carries one — one way the format was cut, not a timeline to copy to the frame; anchors, the reference's hook, rhythm, sound and framing values its format's members do not vary on, each with the band inside which a viewer cannot tell the edit from it (never: the reference never reaches it, e.g. one continuous take); free, what the format's own members vary on, with their usual span; cuts, each with the rule that binds it (first_cut, drop, beat with its window_ms, else free); beats, captions, hook, keep, vary, sound (its clock, a measured drop), limits (how much faster speech and motion may run before a viewer notices), withheld and apply, the steps to fit the creator's own pacing: cut where their action or phrase ends, hold the anchors, let the free cuts move. Then send the edit to check (the person uploads and confirms on Shorti) or call shorti_check_link with format for a result this chat can read back — several edits can each be checked. What the hit did, never why it spread, and not a forecast of views.
| Name | Required | Description | Default |
|---|---|---|---|
| family_id | No | The same id, by its older name. | |
| format_id | No | The format's id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a useful scoping caveat ('What the hit did, never why it spread, and not a forecast of views') that tells the agent what this data is not, which is genuine added context. It does not add anything about freshness, cost, or failure modes beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one enormous run-on paragraph that enumerates the recipe's internal keys (canvas, length_ms, slots, anchors, free, cuts, beats, captions, hook, keep, vary, sound, limits, withheld, apply) in prose. It is not front-loaded and much of the content duplicates what the output schema already carries, so it is over-specified rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description need not explain return values, yet it spends most of its length doing exactly that. The core facts an agent needs — that it is a safe read returning a format's edit plan, and where to send the result — are present, so it is complete, but the completeness is achieved through over-explanation rather than targeted detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema, giving a baseline of 3. The description enriches format_id by naming the sibling tools it comes from, but it never mentions family_id at all, so it adds meaning for only one of the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description does identify the resource — a format's compiled edit plan handed to a creator's editing agent — but the verb is never cleanly stated; it opens with an abstract fragment ('A format's edit for an agent's editor: slots, cuts on the beat...') rather than 'returns the compiled edit recipe for a format.' An agent can eventually infer it is a read that returns a recipe, but the purpose is buried under dense jargon rather than front-loaded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent well on the downstream path: send the edit to `check` or call shorti_check_link with `format`, and it names the sibling sources for format_id (shorti_what_to_shoot, shorti_find, shorti_format). However, it never says when to reach for this tool versus shorti_format or shorti_what_to_shoot, so the selection guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_findFind formatsARead-onlyIdempotentInspect
Formats for words, a category or a pasted link. Search by words — a niche, an action, a place, a creator's @handle (Korean initials work) — by category, or by a pasted TikTok, Instagram or YouTube link (the video and its formats, or not_in_corpus for a video Shorti has not read). Strongest example first; groups whose videos share only a song are left out unless include_sound_groups. With no match the answer lists the categories that have formats. For a brand's product line, shorti_campaign_draft finds the formats a product fits.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A post's link. | |
| lang | No | The creator's language. 'en' answers in the English Shorti wrote: never translate its Korean yourself. | ko |
| limit | No | How many formats a page. | |
| query | No | Words to find; empty lists by category. | |
| cursor | No | A previous answer's next_cursor. | |
| category | No | The creator's niche, when they have one: beauty, food, fashion, daily, comedy, dance, music, pets, fitness, travel, art, gaming, product, info, ai, household. | |
| include_sound_groups | No | Also list groups that share only a song. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| none | No | |
| note | No | |
| as_of | No | when the data was compiled |
| query | No | |
| state | No | 'not_in_corpus': Shorti has not read this video |
| video | No | the video a pasted link names |
| formats | No | |
| matches | No | how many formats matched |
| refusal | No | why nothing was answered, by name |
| next_cursor | No | pass it back as `cursor` for the next page |
| product_fits | No | with no match on a format's own words: the formats whose videos carry a product like the words (a brand's line) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so the safety profile is covered. The description adds real behavioral context beyond that: strongest example first, sound-only groups excluded unless `include_sound_groups`, a `not_in_corpus` outcome for unread videos, and a fallback that lists categories on no match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded and free of filler, with each clause carrying a distinct behavior or routing rule. It is dense and somewhat packed into two long sentences, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, yet the description still covers notable result states (not_in_corpus, no-match category listing) and the sibling alternative. For a 7-parameter, zero-required search tool, this is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by expanding what `query` accepts (niche, action, place, @handle, Korean initials), explaining the `url` outcome (`not_in_corpus`), and clarifying the `include_sound_groups` toggle, adding meaning on top of the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (formats) and its three input modes — words, category, or a pasted link — and explicitly distinguishes itself from shorti_campaign_draft for brand product lines. The opening 'Formats for words, a category or a pasted link' is telegraphic and leaves the verb implicit, but an agent can still tell what this tool returns and how it is triggered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete routing: use words for a niche/action/place/@handle, `category` for a niche filter, or a pasted TikTok/Instagram/YouTube link, and it names shorti_campaign_draft as the alternative for a brand's product line. It stops short of stating when-not to use it versus other siblings like shorti_check_link or shorti_format.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_formatHow to shoot a formatBRead-onlyIdempotentInspect
One format as a creator shoots it: its plan, its hits, its spread. What its videos do; how_to_shoot — its reference hit step by step on that video's own clock, its length, what the format's videos keep and what a creator may make their own; its strongest hits with links and views; how it has spread; its page and the check with it filled. Address it by format_id (from shorti_what_to_shoot or shorti_find, or the slug of its page), or by video_id or url of one of its videos.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | One of its videos, by the post's link. | |
| lang | No | The creator's language. 'en' answers in the English Shorti wrote: never translate its Korean yourself. | ko |
| video_id | No | One of its videos, by Shorti's id. | |
| format_id | No | The format's id or its page's slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| hits | No | the format's strongest hits |
| next | No | |
| note | No | |
| as_of | No | when the data was compiled |
| format | No | |
| refusal | No | why nothing was answered, by name |
| how_to_shoot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds the scope of returned content (how_to_shoot steps, kept-vs-adaptable elements, hits with links/views), but that overlaps heavily with the existing output schema, so added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One long, semicolon-heavy paragraph with dangling fragments ('What its videos do;') that make it hard to parse, and the key addressing instructions are buried at the end rather than front-loaded. Information density is high but structure is poor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile and an output schema covering returns, the description supplies the missing pieces an agent needs: what the tool exposes and how to address it. It is only short of explicit when-to-use routing against its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond it by naming the sources of format_id (shorti_what_to_shoot, shorti_find, page slug) and the video_id/url alternatives as ways to address the same format. It does not add anything for lang, but the schema handles that thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the resource ('one format as a creator shoots it') and enumerates what it returns — plan, hits, spread, strongest hits with links and views, its page. It distinguishes the resource well enough, though the verb is implied rather than stated and the phrasing is idiosyncratic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent how to address the tool — format_id from shorti_what_to_shoot or shorti_find, or the slug, or a video_id/url — which is useful provenance. But it never states when to use this instead of siblings like shorti_video or shorti_what_to_shoot, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_videoOne videoARead-onlyIdempotentInspect
One video: what happens in it, its beats, its numbers and its formats. By a post's link or Shorti's video_id: what happens in it, its hook, turn and beats (Shorti's reading), views and views per day, length, its page and the formats it belongs to. A video Shorti has not read answers not_in_corpus. detail='full' answers every compiled field (large).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The post's link. | |
| lang | No | The creator's language. 'en' answers in the English Shorti wrote: never translate its Korean yourself. | ko |
| detail | No | 'full': every compiled field, as `full`. | brief |
| video_id | No | Shorti's id of the video. |
Output Schema
| Name | Required | Description |
|---|---|---|
| full | No | with detail='full': the compiled video, every field |
| hint | No | |
| note | No | |
| as_of | No | when the data was compiled |
| state | No | 'not_in_corpus': Shorti has not read this video |
| video | No | |
| formats | No | the formats it belongs to |
| refusal | No | why nothing was answered, by name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent read, so the bar is lower, and the description still adds real context: unread videos answer `not_in_corpus`, and `detail='full'` returns every compiled field as a large payload. Those edge-case and cost traits are not in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly the right length, but it is redundant: 'what happens in it' and 'its beats' appear twice, and the phrase 'By a post's link or Shorti's video_id:' interrupts the field list. Front-loading is fine, but the repetition costs it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description covers both addressing modes and the important not_in_corpus and full-detail behaviors, leaving little an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents url, lang, detail and video_id, including the enum meanings. The description only re-states that full is large and that lookup accepts a link or id, adding minimal semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: retrieve one video with its beats, numbers and formats, addressable by post link or Shorti video_id. It is clear enough to distinguish from siblings like shorti_find or shorti_format, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by explaining the two lookup keys ('a post's link or Shorti's video_id') and the `not_in_corpus` outcome, but gives no explicit when-to-use versus shorti_find or shorti_check_link, and no guidance on when brief vs full detail is appropriate beyond a size warning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shorti_what_to_shootWhat to shoot this weekARead-onlyIdempotentInspect
The formats to shoot this week: the week's picks, then the week's feed. The short-form formats breaking out now (TikTok, Reels, Shorts): this week's picks first — each with Shorti's line on the hit that broke out this week (this_week.why) and that hit's link — then the rest of the week's feed, in the order Shorti's home shows it. Each format says what its videos do, its strongest video (link, views, poster), how it has spread, its page and the check with it filled. Narrow by category (the creator's niche) and platform. Signed in, the person's own week leads (for_you: why each came to them). Use it when a creator or a brand asks what to make now; then shorti_format(format_id) for how to shoot one.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | The creator's language. 'en' answers in the English Shorti wrote: never translate its Korean yourself. | ko |
| limit | No | How many formats. | |
| category | No | The creator's niche, when they have one: beauty, food, fashion, daily, comedy, dance, music, pets, fitness, travel, art, gaming, product, info, ai, household. | |
| platform | No | Only formats with videos on this platform. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| none | No | |
| note | No | |
| week | No | the Monday (KST) the week's picks are fixed on |
| as_of | No | when the data was compiled |
| for_you | No | true when a signed-in reader's own week leads the list |
| formats | No | |
| refusal | No | why nothing was answered, by name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds real behavior beyond that: signed-in requests surface the person's own week first via `for_you`, and the feed is ordered as Shorti's home shows it. That ordering/personalization context is genuinely useful and not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the description is a dense run-on with repeated 'this week' phrasing, nested parentheticals, and backtick-heavy detail that could be trimmed. It is informative but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, yet the description still sketches the shape (format behavior, strongest video, spread, page/check). With four optional params at full schema coverage and clear filter/personalization context, an agent has what it needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents lang, limit, category, and platform. The description restates category as 'the creator's niche' and platform as a narrowing filter, adding only marginal semantics. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the week's short-form formats breaking out now) and scope (picks first, then the feed), and it explicitly names the sibling shorti_format for the follow-up step. It is clear what the tool returns, though the run-on prose obscures the core verb somewhat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use it when a creator or a brand asks what to make now') and routes to the alternative ('then shorti_format(format_id) for how to shoot one'), which is strong sibling differentiation. It lacks any when-not guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Changed
shorti_find2 fields changed- changed
Output schema / properties / formats / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "example": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its strongest video" - }, - "format_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" - }, - "idea": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what the format's videos do (Shorti's reading)" - }, - "links": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "check": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's check with this format filled: the person uploads a take there" - }, - "page": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the format's page on Shorti" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ride": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how it has spread, counted from its videos' posting dates" - }, - "same": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what its videos share: 'format' (the build) or 'sound' (the music)" - }, - "sound": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the music's title, when the videos share it" - }, - "this_week": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "hit": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "that hit" - }, - "why": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "this week's line, written from the frames of the hit that broke out" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "present on this week's picks" - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "videos": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how many published videos the format holds" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "example": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its strongest video" + }, + "for_you": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a signed-in reader's own reason this format came to them" + }, + "format_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" + }, + "idea": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what the format's videos do (Shorti's reading)" + }, + "links": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "check": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's check with this format filled: the person uploads a take there" + }, + "page": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the format's page on Shorti" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ride": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how it has spread, counted from its videos' posting dates" + }, + "same": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what its videos share: 'format' (the build) or 'sound' (the music)" + }, + "sound": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the music's title, when the videos share it" + }, + "this_week": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "hit": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "that hit" + }, + "why": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "this week's line, written from the frames of the hit that broke out" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present on this week's picks" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "videos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how many published videos the format holds" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - changed
Output schema / properties / product_fits / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "example": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its strongest video" - }, - "format_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" - }, - "idea": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what the format's videos do (Shorti's reading)" - }, - "links": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "check": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's check with this format filled: the person uploads a take there" - }, - "page": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the format's page on Shorti" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ride": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how it has spread, counted from its videos' posting dates" - }, - "same": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what its videos share: 'format' (the build) or 'sound' (the music)" - }, - "sound": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the music's title, when the videos share it" - }, - "this_week": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "hit": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "that hit" - }, - "why": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "this week's line, written from the frames of the hit that broke out" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "present on this week's picks" - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "videos": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how many published videos the format holds" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "example": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its strongest video" + }, + "for_you": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a signed-in reader's own reason this format came to them" + }, + "format_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" + }, + "idea": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what the format's videos do (Shorti's reading)" + }, + "links": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "check": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's check with this format filled: the person uploads a take there" + }, + "page": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the format's page on Shorti" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ride": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how it has spread, counted from its videos' posting dates" + }, + "same": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what its videos share: 'format' (the build) or 'sound' (the music)" + }, + "sound": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the music's title, when the videos share it" + }, + "this_week": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "hit": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "that hit" + }, + "why": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "this week's line, written from the frames of the hit that broke out" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present on this week's picks" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "videos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how many published videos the format holds" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
- Changed
shorti_format1 field changed- changed
Output schema / properties / format / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "example": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its strongest video" - }, - "format_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" - }, - "idea": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what the format's videos do (Shorti's reading)" - }, - "links": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "check": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's check with this format filled: the person uploads a take there" - }, - "page": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the format's page on Shorti" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ride": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how it has spread, counted from its videos' posting dates" - }, - "same": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what its videos share: 'format' (the build) or 'sound' (the music)" - }, - "sound": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the music's title, when the videos share it" - }, - "this_week": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "hit": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "that hit" - }, - "why": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "this week's line, written from the frames of the hit that broke out" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "present on this week's picks" - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "videos": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how many published videos the format holds" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "example": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its strongest video" + }, + "for_you": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a signed-in reader's own reason this format came to them" + }, + "format_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" + }, + "idea": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what the format's videos do (Shorti's reading)" + }, + "links": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "check": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's check with this format filled: the person uploads a take there" + }, + "page": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the format's page on Shorti" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ride": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how it has spread, counted from its videos' posting dates" + }, + "same": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what its videos share: 'format' (the build) or 'sound' (the music)" + }, + "sound": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the music's title, when the videos share it" + }, + "this_week": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "hit": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "that hit" + }, + "why": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "this week's line, written from the frames of the hit that broke out" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present on this week's picks" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "videos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how many published videos the format holds" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
shorti_video1 field changed- changed
Output schema / properties / formats / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "example": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its strongest video" - }, - "format_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" - }, - "idea": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what the format's videos do (Shorti's reading)" - }, - "links": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "check": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's check with this format filled: the person uploads a take there" - }, - "page": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the format's page on Shorti" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ride": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how it has spread, counted from its videos' posting dates" - }, - "same": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what its videos share: 'format' (the build) or 'sound' (the music)" - }, - "sound": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the music's title, when the videos share it" - }, - "this_week": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "hit": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "that hit" - }, - "why": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "this week's line, written from the frames of the hit that broke out" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "present on this week's picks" - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "videos": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how many published videos the format holds" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "example": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its strongest video" + }, + "for_you": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a signed-in reader's own reason this format came to them" + }, + "format_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" + }, + "idea": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what the format's videos do (Shorti's reading)" + }, + "links": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "check": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's check with this format filled: the person uploads a take there" + }, + "page": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the format's page on Shorti" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ride": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how it has spread, counted from its videos' posting dates" + }, + "same": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what its videos share: 'format' (the build) or 'sound' (the music)" + }, + "sound": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the music's title, when the videos share it" + }, + "this_week": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "hit": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "that hit" + }, + "why": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "this week's line, written from the frames of the hit that broke out" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present on this week's picks" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "videos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how many published videos the format holds" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
- Changed
shorti_what_to_shoot2 fields changed- added
Output schema / properties / for_youAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "true when a signed-in reader's own week leads the list" +} - changed
Output schema / properties / formats / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "example": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its strongest video" - }, - "format_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" - }, - "idea": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what the format's videos do (Shorti's reading)" - }, - "links": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "check": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's check with this format filled: the person uploads a take there" - }, - "page": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the format's page on Shorti" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null - }, - "ride": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how it has spread, counted from its videos' posting dates" - }, - "same": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what its videos share: 'format' (the build) or 'sound' (the music)" - }, - "sound": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the music's title, when the videos share it" - }, - "this_week": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "hit": { - "anyOf": [ - { - "additionalProperties": true, - "properties": { - "by": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "its creator's handle" - }, - "platform": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "posted": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the day it went up, YYYY-MM-DD" - }, - "poster": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "a still of it to show" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the post on its platform" - }, - "video_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Shorti's id of the video (shorti_video reads it)" - }, - "views": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "the platform's view count, read at as_of" - }, - "what": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "what happens in it (Shorti's reading)" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "that hit" - }, - "why": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "this week's line, written from the frames of the hit that broke out" - } - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "description": "present on this week's picks" - }, - "title": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "videos": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "how many published videos the format holds" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "example": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its strongest video" + }, + "for_you": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a signed-in reader's own reason this format came to them" + }, + "format_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the format (shorti_format, shorti_edit_recipe and shorti_check_link take it)" + }, + "idea": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what the format's videos do (Shorti's reading)" + }, + "links": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "check": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's check with this format filled: the person uploads a take there" + }, + "page": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the format's page on Shorti" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null + }, + "ride": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how it has spread, counted from its videos' posting dates" + }, + "same": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what its videos share: 'format' (the build) or 'sound' (the music)" + }, + "sound": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the music's title, when the videos share it" + }, + "this_week": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "hit": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "its creator's handle" + }, + "platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "posted": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the day it went up, YYYY-MM-DD" + }, + "poster": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "a still of it to show" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the post on its platform" + }, + "video_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Shorti's id of the video (shorti_video reads it)" + }, + "views": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "the platform's view count, read at as_of" + }, + "what": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "what happens in it (Shorti's reading)" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "that hit" + }, + "why": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "this week's line, written from the frames of the hit that broke out" + } + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "present on this week's picks" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "videos": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "how many published videos the format holds" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +]
9 tool updates
- First observed
shorti_campaign_board - First observed
shorti_campaign_draft - First observed
shorti_campaigns_for_me - First observed
shorti_check_link - First observed
shorti_edit_recipe - First observed
shorti_find - First observed
shorti_format - First observed
shorti_video - First observed
shorti_what_to_shoot
Related MCP Connectors
Real TikTok and Instagram hooks that already work, in any language, with why each travelled.
Short-form video analytics and trend intelligence for TikTok, YouTube, and Instagram
Discover and research viral social content on TikTok, Instagram Reels, and YouTube Shorts.
Related MCP Servers
- AlicenseAqualityDmaintenanceAI tools for short-form video creators (TikTok, Instagram Reels, YouTube Shorts, Facebook Reels) — viral trend search, video analysis info, content strategy use cases.335 npm1MIT
- AlicenseNot gradedqualityBmaintenanceViral-content intelligence for AI agents — 7 read-only MCP tools for TikTok/YouTube hook scoring, virality prediction, trend analysis, and viral template search, with evidence-layer scoring.MIT
- AlicenseAqualityCmaintenanceProvides AI agents with structured short-form content mechanics including hooks, script structures, retention strategies, and CTAs, along with auditing tools to avoid common posting failures.749 npmMIT
- AlicenseNot gradedqualityCmaintenanceCreator commerce intelligence for TikTok Shop brands. GMV benchmarks, ROC calculations, ideal creator profiles, content formats, and commission guidance powered by $30M+ in real transaction data.3 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.