Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Plot Speaks

REMOTE · PLOTSPEAKS.COM · 2 COMPONENTS

Voice mysteries, history battles and trivia with your assistant as host. Sign in to keep progress.

+3 this week 68 Trust /100

Last scanned (7 hours ago)

Scores higher than 53% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security57
Transport & Reachability100
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7029 tokens (~260/item across 27 items; 25 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 27 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Nov 26 0
    • Tool “claim_plays” rewrote its description, which is the text the model reads security
    • Tool “game_board” rewrote its description, which is the text the model reads security
    • Tool “get_cue” rewrote its description, which is the text the model reads security
    • Tool “list_stories” rewrote its description, which is the text the model reads security
    • Tool “team_roster” rewrote its description, which is the text the model reads security
    • Tool “world_update” rewrote its description, which is the text the model reads security
    • Tool “write_story” rewrote its description, which is the text the model reads security
    • Tool “pick_for_me” rewrote its description, which is the text the model reads security
    • Tool “request_team” rewrote its description, which is the text the model reads security
    • Tool “reveal_solution” rewrote its description, which is the text the model reads security
    • Tool “start_story” rewrote its description, which is the text the model reads security
    • Schema quality: 216 → 260 ▼ functional
    • Schema quality: good → excellent functional
    • “claim_plays” reworded the description of “play_ids” cosmetic
    • “game_board” reworded the description of “play_id” cosmetic
    • “game_board” reworded the description of “slug” cosmetic
    • “get_cue” reworded the description of “cue” cosmetic
    • “get_cue” reworded the description of “play_id” cosmetic
    • “get_cue” reworded the description of “slug” cosmetic
    • “list_stories” reworded the description of “collection” cosmetic
    • “start_story” reworded the description of “versus_code” cosmetic
    • “submit_story” reworded the description of “email_when_approved” cosmetic
    • “team_roster” reworded the description of “team” cosmetic
    • “world_update” reworded the description of “day” cosmetic
    • “world_update” reworded the description of “initiative” cosmetic
    • “world_update” reworded the description of “location” cosmetic
    • “world_update” reworded the description of “npcs” cosmetic
    • “world_update” reworded the description of “party” cosmetic
    • “world_update” reworded the description of “play_id” cosmetic
    • “world_update” reworded the description of “quests” cosmetic
    • “world_update” reworded the description of “rest” cosmetic
    • “world_update” reworded the description of “slug” cosmetic
    • “write_story” reworded the description of “genre” cosmetic
    • “write_story” reworded the description of “length” cosmetic
    • “list_stories” reworded the description of “page” cosmetic
    • “roll” reworded the description of “hidden” cosmetic
    • “start_story” reworded the description of “chapter” cosmetic
    • “start_story” reworded the description of “minutes” cosmetic
    • “start_story” reworded the description of “new_campaign” cosmetic
    • “start_story” reworded the description of “path_code” cosmetic
    • “start_story” reworded the description of “play_id” cosmetic
    • “start_story” reworded the description of “resume_code” cosmetic
    • “start_story” reworded the description of “slug” cosmetic
    • “start_story” reworded the description of “team” cosmetic
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Oct 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “list_stories” rewrote its description, which is the text the model reads security
    • Tool “withdraw_submission” rewrote its description, which is the text the model reads security
    • Stability: unverified → 0.03 ▲ functional
    • New prompt “make_a_game_or_quiz” functional
    • New prompt “write_a_story” functional
    • New tool “submission_status” functional
    • “submit_story” added an optional parameter “email_when_approved” cosmetic
    • “list_stories” reworded the description of “collection” cosmetic
    • “pick_for_me” reworded the description of “collection” cosmetic
    • “withdraw_submission” reworded the description of “claim_code” cosmetic
    • “withdraw_submission” made “claim_code” optional cosmetic
  • 28 Oct 26 64

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://plotspeaks.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=plotspeaks.com CN=WE1,O=Google Trust Services,C=US 17 Oct 2026 15 Jan 2027 ECDSA 256 ECDSA-SHA256 87af80a32900359b139ee38bae9f119b
SANs: plotspeaks.com, dev.plotspeaks.com, *.dev.plotspeaks.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of plotspeaks.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
plotspeaks.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://plotspeaks.com/mcp Verified 200
http (plaintext) http://plotspeaks.com/mcp HTTPS enforced 301 https://plotspeaks.com/mcp
MCP tools · 25 exposed · ~5,408 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
check_accusation ~89

Checks a formal accusation in a Plot Speaks mystery. Returns the verdict line for the accused person, starting Correct. or Innocent., and the name it matched. Records the accusation and verdict anonymously.

NameTypeReqDescription
accusedstringyesThe name of the person the user accused
play_idstring–The play id from start_story
slugstringyesThe story slug

No output schema declared.

No examples provided.

choose ~156

Moves a Plot Speaks choose-your-path story on by the player's choice and returns what happens next: the scene to narrate and the choices that follow, or the ending. With no choice it returns where the play is now and the path so far (for resuming). With go_back it returns to the last choice so the player can choose again.

NameTypeReqDescription
choicestring–The player's answer: the choice's number, or their words for it
go_backboolean–True when the player wants to go back to their last choice and choose again (after an ending, or any time they ask)
play_idstringyesThe play id from start_story
slugstringyesThe story slug

No output schema declared.

No examples provided.

claim_plays ~183

Attaches plays made earlier without an account to the signed-in player's Plot Speaks account, so they appear in their history (with how each ended) and in the "not played yet" filter, and marks the trivia clues already heard in those games. Returns a sentence naming the titles added and how many could not be added (id not found, or already on another account). Without a signed-in account it returns an error saying so. Changes the account's history; plays on another account are left alone.

NameTypeReqDescription
play_idsarrayyes1 to 50 play ids, as returned by start_story, e.g. ["3f2b8c1e-9d4a-4e7b-a1c2-5b6d7e8f9a0b"]; ids of plays made in this conversation without an account

No output schema declared.

No examples provided.

game_answer ~274

Checks a player's answer to the open trivia clue, scores it and returns the ruling with the answer, or the next step of a stepped clue. In a survey game it checks an answer against the hidden board; in a letter game it takes a called letter or a solve attempt, in the player's own words; in a timeline game it takes where the open card goes (before X, between X and Y, at the end), in the player's own words; in Worms! it takes the face to keep ("the fours", "worms"), "roll again" or "stop", and "take" or "steal"; in Yacht it takes the dice to keep ("the threes", "keep 3 3 5", "keep all", "none", "reroll the one") or "score it", then the box ("full house", "fours", "chance") and a yes or no to "Take a zero?"; in Pigs! it takes "yes" (throw again) or "no" (bank).

NameTypeReqDescription
answerstringyesWhat the player said, in their words
play_idstringyesThe play id from start_story
playerstring–The answering player's name, for the scores
slugstringyesThe game's slug

No output schema declared.

No examples provided.

game_board ~204

Returns the current state of a Plot Speaks game in play, as text, without changing it. For trivia: the scores and the categories and values still on the board. For a survey or letter game: the scores, the open question or puzzle and what is revealed so far. For a timeline game: the line so far, lives and the open card. For Worms!: the tiles, stacks and open roll. Reads only; nothing is recorded. A play id that does not belong to that game returns an error, and a story that is not a game returns an error saying so.

NameTypeReqDescription
play_idstringyesThe play id start_story returned for this game, e.g. 3f2b8c1e-9d4a-4e7b-a1c2-5b6d7e8f9a0b
slugstringyesThe game's slug or title, e.g. team-trivia

No output schema declared.

No examples provided.

game_challenge ~89

Challenges the last trivia ruling: three different AI models judge the player's answer against the clue, and the ruling flips only if at least two agree it should count. Once per clue. In a timeline game it re-checks the last placement against the years and says what was heard.

NameTypeReqDescription
play_idstringyesThe play id from start_story
slugstringyesThe game's slug

No output schema declared.

No examples provided.

game_question ~278

Opens one clue on a Plot Speaks trivia board and returns its text (not the answer). Category "final" opens the final once the board is clear. In a survey or letter game it deals the next question or puzzle: pass category "next" ("skip" gives the open one up; "no steal" closes a survey question after three strikes). In a timeline game it starts a round: pass the deck's name, then " for " and the players' names (the reply deals the first card); "next" repeats the open card. In Worms!, Yacht (and Pigs!) it sets up the game: pass "rules" for the how-to-play beats, or "players", the names and "and Wormbot" (Skipper in Yacht, Hambot in Pigs!) or "no CPU" ("play again" after a game).

NameTypeReqDescription
categorystringyesThe category the player picked, or "final" ("next" in a survey or letter game; the deck's name in a timeline game; "rules" or "players Ann, Bob and Wormbot" in Worms!)
play_idstringyesThe play id from start_story
slugstringyesThe game's slug
valueinteger–The value the player picked, e.g. 300

No output schema declared.

No examples provided.

get_cue ~268

Returns one scene cue from a Plot Speaks mystery or adventure script, as text: a READ ALOUD part (the scene as spoken narration) and, where the cue has them, NARRATOR NOTES that are not meant to be read aloud because they would spoil the scene; cue S1 also lists the follow-up cues to listen for. With a play id it records the scene reached as an anonymous play event, which the play's watch page shows as a timeline. An unknown slug returns an error naming the available stories; a cue id the story lacks returns an error saying so (or that the story has no cues).

NameTypeReqDescription
cuestringyesThe cue id as written in the story's script: S, a number and an optional letter; the S and case may be omitted. E.g. S1, S3b or 3b
play_idstring–The play id start_story returned, e.g. 3f2b8c1e-9d4a-4e7b-a1c2-5b6d7e8f9a0b; when given, the cue is logged against that play
slugstringyesThe story slug or title, e.g. example-dinner-party

No output schema declared.

No examples provided.

list_stories ~538

Lists the Plot Speaks stories and games that can be played by voice, three at a time with a one-line pitch each; the page argument gives the next three. Narrow it by a collection (Murder Mysteries, Greek Myths, Classic Detectives, Horror and Ghosts, Seasons, Holiday Specials, Bedtime, Dice Games, Road Trip, Read-Aloud Classics, Written by players), by length (max_minutes), by what's new (new: true), by kind (mysteries, adventures, choose-your-path stories, trivia, guessing games, game shows, dice games, word games, party and storytelling games, Table Talk, Story Time read-alouds, wind-downs, open worlds and campaigns) or, within mysteries, classic or dark. With group_by_category and no page it returns the whole catalogue under kind headings. An unknown kind or collection returns a message naming the valid ones.

NameTypeReqDescription
audiencestring–Narrow by audience: general, or the all-ages pieces. Omit for everything
collectionstring–A collection, by name or id, loosely matched: greek-myths, classic-detectives, ghost-gothic, seasons, holidays, bedtime, dice, road-trip, classics, players. Examples: "Greek Myths", "detective storie…
genrestring–Within mysteries and adventures: murder-mystery (all murder mysteries), classic (murder mysteries that aren't dark), dark (dark murder mysteries) or adventure
group_by_categoryboolean–True, with no page, for the whole list grouped under kind headings
kindstring–Only list this kind: mystery, adventure, branching (choose your path), trivia, guessing (guessing games), gameshow (game shows), dice (dice games), word (word games), party (party and storytelling),…
max_minutesinteger–Only pieces this many minutes long or shorter
newboolean–True for what's new: the newest pieces first, with their What's New line
not_playedboolean–True to leave out what this player has already played (signed-in players only)
pageinteger–Which page of three to return, from 1; page 2 gives items 4 to 6 of the same filtered list. Each result states the page and total pages

No output schema declared.

No examples provided.

my_history ~53

Returns what a signed-in Plot Speaks player has played, newest first, with how each ended. Without an account it says how to get one.

NameTypeReqDescription
limitinteger–How many to list (default 15)

No output schema declared.

No examples provided.

open_plot_speaks ~123

Returns the Plot Speaks welcome: a short spoken introduction, a question offering to list the stories, start one or write one, and a menu of story categories with example titles. With skip_intro the introduction is left out; with instructions it adds the how-to-play.

NameTypeReqDescription
instructionsboolean–True when the user asks how Plot Speaks works or wants the instructions again: adds the how-to-play
skip_introboolean–True when the user has heard the introduction before or asks to skip it: returns only the question and the menu

No output schema declared.

No examples provided.

pick_for_me ~223

Picks ONE Plot Speaks story or game to play now, ranked from the player's mood, the time they have, how many are playing and an optional collection, skipping what a signed-in player has already played. Returns the pick's title, slug and one-line pitch, plus a runner-up. Records only anonymous counts of the mood matched and length asked for. If nothing fits every filter it says so instead of picking.

NameTypeReqDescription
all_agesboolean–True to keep it suitable for every age (nothing rated above PG)
collectionstring–Only from this collection, by name or id: Murder Mysteries, Greek Myths, Classic Detectives, Horror and Ghosts, Seasons, Holiday Specials, Bedtime, Dice Games, Road Trip, Read-Aloud Classics, Written…
minutesinteger–How long they have
moodstring–The mood or kind of thing, in their words, e.g. spooky, light, a mystery, something calm
playersinteger–How many are playing

No output schema declared.

No examples provided.

rate_story ~287

Saves a rating and feedback for a Plot Speaks story the user has just played: 1 to 5 stars, whether anything was given away too early, an optional comment about the story, optional feedback about the experience for the people who make Plot Speaks, and, for a story still being tested, the player's verdict (passed, or needs work). Needs the play id from start_story; one rating per play; stars or a verdict (or both).

NameTypeReqDescription
commentstring–The player's comment about the story, if any, in their words
feedbackstring–Feedback about the experience (the narration, the connector, what to improve), if any, in the player's words; read by the people who make Plot Speaks
play_idstringyesThe play id from start_story
slugstringyesThe story slug
spoiledboolean–True if the player felt the narrator gave something away too early
starsinteger–1 to 5 (optional when a verdict is given)
verdictstring–For a story being tested: "passed" if it passed the player's test, "needs_work" if something should be improved (put what, in their words, in feedback)
wishstring–What else the player would like to play, if they said, in their words

No output schema declared.

No examples provided.

request_team ~91

Records a player's request for a sports team that Plot Speaks Team Trivia doesn't cover yet, for the people who maintain the database. Stores the team name and note as a request event, with no account or personal details attached, and returns a confirmation.

NameTypeReqDescription
notestring–Anything else they said about it
teamstringyesThe team they'd like added, with its league if they said it

No output schema declared.

No examples provided.

reveal_solution ~124

Returns the full solution of a Plot Speaks mystery (who did it, why, and the clues that pointed there) and what became of each character. Without gave_up: true it is refused unless an accusation is already recorded for that play; with gave_up: true it answers at once. Records that the play ended in a reveal.

NameTypeReqDescription
gave_upboolean–True when the player has said they give up or want the answer without accusing anyone
play_idstringyesThe play id from start_story
slugstringyesThe story slug

No output schema declared.

No examples provided.

review_story ~124

Runs the format checks on a draft story.md, and with secrets.md also the answer-key checks (including whether story.md gives the culprit away). Returns a status, the findings with line numbers, and a fair-play checklist. Nothing sent is stored.

NameTypeReqDescription
secrets_mdstring–The full text of secrets.md (the private answer key), if written
slugstring–The story's folder name, e.g. the-last-toast; checks that name is plotspeaks-<slug>
story_mdstringyesThe full text of story.md

No output schema declared.

No examples provided.

roll ~155

Rolls dice for a Plot Speaks campaign or adventure on the server: "1d20+5", "2d6", "adv 1d20+3" (advantage), "dis 1d20" (disadvantage), "4d6 drop lowest". Returns each die and the total.

NameTypeReqDescription
dicestringyesThe roll, e.g. 1d20+5
hiddenboolean–True for a roll the story's rules keep secret from the players (a world clock, a hidden table); the result comes with a note that it is hidden and not for reading aloud
whystring–What the roll is for, e.g. Mira's stealth check

No output schema declared.

No examples provided.

start_story ~586

Loads a Plot Speaks story or game, of any kind (mystery, choose-your-path, trivia, dice or word game, Team Trivia, campaign), by slug or title. Returns its script as text (setting, cast, scenes or board, and how it is narrated; one chapter at a time for multi-chapter stories) and a play id the play's other tools take. Records an anonymous play (story, connecting assistant, time; no conversation text), and on the account connector adds it to the player's history. An unknown slug or title returns an error naming close matches or the available stories; a chapter past the last returns an error; an unreleased chapter returns its release date.

NameTypeReqDescription
chapterinteger–Chapter number for a multi-chapter story, e.g. 2 for the second chapter (default 1); an error if the story has fewer chapters
minutesinteger–For a trivia game: minutes the player has, e.g. 25, so the game is sized to fit
new_campaignboolean–For a campaign, when a signed-in player already has one: true starts a fresh campaign instead of carrying on their latest (default false)
path_codestring–For a choose-your-path story: the three-word path code a friend received at an ending, e.g. brave-river-stone, to follow that friend's choices; codes last 30 days, an unknown one returns an error
play_idstring–With chapter above 1: the play id returned for chapter 1, e.g. 3f2b8c1e-9d4a-4e7b-a1c2-5b6d7e8f9a0b, so both chapters count as one play; ignored if it belongs to another story
resume_codestring–For a campaign: the three-word code given at the end of an earlier session, e.g. amber-otter-lantern; carries on that campaign's world instead of starting one. An unknown code returns an error
slugstringyesThe story's slug or title, matched loosely, 2 to 80 characters, e.g. example-dinner-party or The Last Toast
teamstring–For the team-trivia story: the team as the player said it, e.g. Steelers, Pittsburgh or PIT; "Yankees vs Red Sox" gives a rivalry board. Several matches or an unsupported team return a message instea…
versus_codestring–For a trivia board: the three-word code a friend received at the end of their game, to play the same board and compare scores; pass slug "versus" with it, the code names the game. Codes last 30 days

No output schema declared.

No examples provided.

submission_status ~103

Read-only. Shows where a story submitted to Plot Speaks stands when its submission id and claim code match: received and waiting for a person, approved (with the story's link), or not accepted (with the reviewer's short note, if there is one). Changes nothing.

NameTypeReqDescription
claim_codestringyesThe claim code from the receipt, e.g. ABCD-EFGH-JKMN
idstringyesThe submission id from the receipt

No output schema declared.

No examples provided.

submit_story ~311

Submits a finished Plot Speaks story for human review, credited to the name the writer chooses. Runs the format checks, a safety screen and a daily limit, then stores it; nothing is public until a person approves it. Returns a submission id and a one-time claim code for withdrawing or updating it. With replaces_id and claim_code, it replaces an earlier submission.

NameTypeReqDescription
author_namestringyesThe name credited publicly as "Written by" (2 to 60 characters; a pen name is fine). Checked by the reviewer with the story.
claim_codestring–Only to update an earlier submission: the claim code from its receipt
contactstring–Optional: how the reviewer can reach the writer (email or handle). Seen only by the reviewer.
email_when_approvedboolean–True records the writer's request for one email, to the verified Google address of the account they signed in with, when a person approves the story (default false: no email). It takes effect only on…
replaces_idstring–Only to update an earlier submission: its submission id
secrets_mdstring–The full text of secrets.md (kept private on the server; mysteries need one)
story_mdstringyesThe full text of story.md

No output schema declared.

No examples provided.

team_roster ~149

Returns a sports team's current roster for Plot Speaks Team Trivia, read live from ESPN (cached for hours): players grouped by position with jersey numbers, and the head coach, as plain text. Covers the leagues in the Team Trivia database. Reads only; nothing is recorded. A name that fits several teams returns an error listing the candidates with their leagues; a team not in the database returns an error listing the leagues covered; if ESPN does not answer, the text says so.

NameTypeReqDescription
teamstringyesThe team as the player said it: a city, name, nickname or abbreviation, e.g. Steelers, Pittsburgh or PIT; a full name such as Pittsburgh Steelers is the most exact

No output schema declared.

No examples provided.

withdraw_submission ~105

Deletes a story submitted to Plot Speaks (pending or published) when its submission id and claim code match. On the account connector, a signed-in writer can withdraw their own story with just the id.

NameTypeReqDescription
claim_codestring–The claim code from the receipt, e.g. ABCD-EFGH-JKMN. Needed unless the writer is signed in on the account connector and the story is theirs.
idstringyesThe submission id from the receipt

No output schema declared.

No examples provided.

world_recall ~101

Returns a Plot Speaks campaign's state (day, place, party with hit points, spell slots and gear, people met, quests, the story so far) by play id, or by the three-word resume code the players were given.

NameTypeReqDescription
play_idstring–The play id, when you have it
resume_codestring–The three-word resume code the players say
slugstringyesThe campaign's slug

No output schema declared.

No examples provided.

world_update ~583

Applies changes to a Plot Speaks campaign's saved world: new characters, damage and healing, spells cast, items, gold, rests, location, day, people met (the dead stay dead), quests, fight turn order (initiative) and a one-line story note. Send only what changed; fields left out are untouched. Returns a RECORDED list, a REFUSED list giving the reason for each change the campaign's rules do not allow, and the updated state. Saves to the campaign play (no personal data). An unknown slug, a non-campaign story or an unknown play id returns an error.

NameTypeReqDescription
dayinteger–The campaign day number, e.g. 3, if it moved on
initiativearray–The turn order in a fight, first is up, naming only creatures the party can see (the screen shows it), e.g. ["Mira","Goblin","Tobin"]; sending the list again replaces it, and an empty list ends the f…
locationstring–Where the party is now, e.g. the Sunken Chapel (kept to 120 characters)
notestring–One line for the story so far (kept to 240 characters)
npcsarray–People met or changed, each {name, status, note}; status e.g. friendly, hostile or dead (the dead stay dead); notes kept to 160 characters. E.g. [{"name":"Old Bram","status":"friendly"}]
partyarray–Up to 6 party members to add or change, matched by name (an unknown name adds a character). Each: name, plus any of class, level (1 to 5), hp, max_hp, damage, heal, spend_slot (spell level 1 to 5), m…
play_idstringyesThe campaign's play id from start_story or world_recall, e.g. 3f2b8c1e-9d4a-4e7b-a1c2-5b6d7e8f9a0b
questsarray–Quests taken or changed, each {name, status, note}; status is open, done or failed; notes kept to 160 characters. E.g. [{"name":"Find the lantern","status":"done"}]
reststring–"short" or "long": applies that rest's recovery to the party under the campaign's rules
slugstringyesThe campaign's slug or title, e.g. the campaign named in start_story's script

No output schema declared.

No examples provided.

write_story ~211

Returns the writing kit for a new Plot Speaks story as one text: a short introduction to how a story is built (a public story.md plus a private answer key, secrets.md, reviewed by a person before anything is published), a suggested way for the writer and assistant to draft, review and submit it together, and the format template for the chosen genre and length. Reads only; nothing is stored or recorded beyond anonymous counts of genre and length. Genre and length are fixed choices, and omitting either gives the default.

NameTypeReqDescription
genrestring–Kind of story to write: murder-mystery (default), dark (a dark murder mystery), adventure, branching (a choose-your-path story), trivia (a trivia board) or game (a voice game); chooses which template…
lengthstring–Playing time of the story: "20" or "30" minutes in one chapter (default "30"), or "2-chapter" for a story in two sittings

No output schema declared.

No examples provided.

Install

How do I install the Plot Speaks MCP server?

Plot Speaks is a hosted endpoint at https://plotspeaks.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · plotspeaks.com

# add to Claude Code
claude mcp add --transport http com-plotspeaks-plot-speaks 'https://plotspeaks.com/mcp'
Common questions

What is the Plot Speaks MCP server?

Plot Speaks is an MCP server listed in the public MCP registry as com.plotspeaks/plot-speaks. Voice mysteries, history battles and trivia with your assistant as host. Sign in to keep progress. This page covers its hosted endpoint (https://plotspeaks.com/mcp).

Is the Plot Speaks MCP server safe to use?

Plot Speaks scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Plot Speaks MCP server expose?

Plot Speaks exposes 25 tools: open_plot_speaks, pick_for_me, list_stories, claim_plays, my_history, and 20 more. Their descriptions and schemas cost roughly 5,408 tokens of context every time the server is loaded.

Does the Plot Speaks MCP server require authentication?

No. We connected to Plot Speaks without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Plot Speaks MCP server still maintained?

Plot Speaks is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.