Repository navigation
INSPECTOR RUN 2026 10 10
Tool-test path 1 for RISE's connector-directory submission: every tool and the card resource called against the live server with the official MCP Inspector, from its command line. The other path, the connector called from Claude, is in CLAUDE-RUN-2026-10-10.md. The submission packet that cites both is the connector submission packet.
| When | 2026-10-10, about 05:10 to 05:15 UTC |
| Server |
https://rise.syberlabs.io/api/mcp, Streamable HTTP, no authentication |
| Live release |
a70c443701f8a73a27de846a690568c309d6c87f (/release.txt at the time) |
| Inspector |
@modelcontextprotocol/inspector 2.10.1 (latest on npm at the time), CLI mode |
| Node | v22.23.2, Windows 11; run from a checkout of main at a70c4437
|
| Secrets | none exist for this server; nothing below is redacted, only trimmed where marked |
Every call below was answered over the network by the live Worker. Each exited 0, except the
two deliberate refusals in section 4, which exit 5: the Inspector's code for a tool result
with isError: true, which it also reports as {"error":{"code":"tool_is_error",…}}.
| Call | Result |
|---|---|
tools/list |
Two tools, rise_present and rise_guide, each with a title, a description, an input schema and annotations readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false. 10,747 bytes as compact JSON. --strict reports no schema portability problem. |
tools/list --app-info |
rise_present has an app: ui://rise/current, text/html;profile=mcp-app, connectDomains and resourceDomains only https://rise.syberlabs.io, frameDomains: []. rise_guide has none. |
tools/call rise_guide (style=premium-educational) |
The format reference, 23,503 bytes of text, 381 lines: the v1 example and rules, beats, the scene engines with parameters and cues, the code-scene contract, the premium-educational guidance, three worked Currents (vector-length, slope-of-a-curve, parts-of-a-cell) and the figure rules. No 3Blue1Brown. |
tools/call rise_present (the worked parts-of-a-cell) |
Accepted. A one-line receipt as text; structuredContent.current is the Current sent, byte for byte. |
tools/call rise_present (an invalid Current) |
Refused cleanly: isError: true and a one-line validator message. |
tools/call rise_guide (an unknown style) |
Refused cleanly: isError: true and the list of styles. |
resources/list |
Three resources: the card ui://rise/current and the two style references. |
resources/read ui://rise/current |
7,528 bytes of HTML, text/html;profile=mcp-app, with its own Content Security Policy (no unsafe-eval) and the same CSP and display modes in _meta as the tool declares. |
The commands are as run. On Windows the rise_present call was made from Git Bash, so that
the Current's JSON reaches the Inspector unaltered; cell-args.json is
{"current": <the worked Current>}, written from EXAMPLES in
src/live/guide/styles/premium-educational.js.
npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/listThe full listing is 25,779 bytes pretty-printed, mostly the current input schema. Each tool
as the listing gave it, without its input schema:
{"name":"rise_present","title":"Present a reading in RISE","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"ui":{"resourceUri":"ui://rise/current"},"ui/resourceUri":"ui://rise/current","openai/toolInvocation/invoking":"Preparing the reading","openai/toolInvocation/invoked":"The reading is ready to play"},"required":["current"],"descriptionBytes":1844}
{"name":"rise_guide","title":"RISE style reference","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"required":["style"],"descriptionBytes":157}npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/list --strictExit 0, nothing on standard error: no portability problem of any severity.
npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/list --app-info --advertise-apps{"hasApp":true,"toolName":"rise_present","resourceUri":"ui://rise/current","csp":{"connectDomains":["https://rise.syberlabs.io"],"resourceDomains":["https://rise.syberlabs.io"],"frameDomains":[]},"prefersBorder":false,"resourceMimeType":"text/html;profile=mcp-app"}
{"hasApp":false,"toolName":"rise_guide"}npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/call --tool-name rise_guide --tool-arg style=premium-educationalOne text block, 23,503 bytes. Its first lines:
A RISE Current is one JSON object. RISE speaks its passages aloud and shows each as it is spoken.
{
"schema": "rise.current.v1",
"id": "light-and-holes",
"title": "Why a black hole is black",
"theme": "cobalt",
"look": "signal",
"origin": {
"kind": "model",
"name": "Your name",
"provider": "Who runs you"
},
Its sections, by the line each begins on: Rules: (28), Beats: (91), the scenes and their
parameters and cues (102), rise.lib (137), Premium Educational ("style": "premium-educational")
(159), How to write it: (165), The worked Currents in this style, each accepted by RISE as it stands: (176) with the three Currents at 178, 241 and 309, and Figures: a picture you draw as SVG. (365).
npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/call --tool-name rise_present \
--tool-args-json "$(cat cell-args.json)"The arguments: the guide's worked Current as it stands, 2,427 bytes: schema
rise.current.v2, style premium-educational, theme jade, one SVG figure scene cell
(the guide's worked figure), seven beats including one hold and a closing shown line, and the
guide's placeholder origin ({"kind":"model","name":"Your name","provider":"Who runs you"}).
The result:
{
"content": [
{ "type": "text", "text": "RISE is presenting \"The parts of an animal cell\" (id \"parts-of-a-cell\") to the reader: 7 beats, about 36 seconds. The reader starts it with Play." }
],
"structuredContent": { "current": "… the Current sent, unchanged (compared byte for byte) …" }
}npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/call --tool-name rise_present \
--tool-args-json '{"current":{"schema":"rise.current.v1","id":"x","title":"Empty","segments":[]}}' \
--format json{"result":{"content":[{"type":"text","text":"RISE refused this Current: Expected a plain object ($.origin). Correct it and call rise_present again."}],"isError":true}}npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method tools/call --tool-name rise_guide --tool-arg style=nonexistent --format json{"result":{"content":[{"type":"text","text":"Call rise_guide with {\"style\": <a style>} only; the styles are premium-educational, open-field."}],"isError":true}}npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method resources/list{
"resources": [
{
"name": "rise-current",
"title": "RISE",
"uri": "ui://rise/current",
"description": "Plays a Current: spoken in the device’s own voice and shown as it is spoken.",
"mimeType": "text/html;profile=mcp-app"
},
{
"name": "rise-guide-premium-educational",
"title": "RISE style: premium-educational",
"uri": "ui://rise/guide/premium-educational",
"description": "The format reference for the premium-educational style, with worked Currents.",
"mimeType": "text/markdown"
},
{
"name": "rise-guide-open-field",
"title": "RISE style: open-field",
"uri": "ui://rise/guide/open-field",
"description": "The format reference for the open-field style, with worked Currents.",
"mimeType": "text/markdown"
}
]
}npx --yes @modelcontextprotocol/inspector@2.10.1 --cli https://rise.syberlabs.io/api/mcp \
--transport http --method resources/read --uri ui://rise/currentOne content entry, 7,528 bytes of text. Its metadata:
{"uri":"ui://rise/current","mimeType":"text/html;profile=mcp-app","_meta":{"ui":{"csp":{"connectDomains":["https://rise.syberlabs.io"],"resourceDomains":["https://rise.syberlabs.io"],"frameDomains":[]},"prefersBorder":false},"openai/widgetDomain":"https://rise.syberlabs.io","openai/ui":{"availableDisplayModes":["inline","fullscreen","pip"]},"openai/widgetDescription":"A spoken reading of the answer, its words and a visual shown as they are spoken, which the reader starts with Play and can pause and resume."}}The HTML, its first 40 lines of 138:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src https://rise.syberlabs.io blob:; worker-src blob:; connect-src https://rise.syberlabs.io; img-src https://rise.syberlabs.io blob: data:; font-src https://rise.syberlabs.io; style-src https://rise.syberlabs.io 'unsafe-inline'; media-src https://rise.syberlabs.io blob:">
<meta name="rise-embed" content="/live?embed=mcp">
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description"
content="RISE — an audiovisual reader. Curated texts, paced reading, and museum imagery arranged around the words.">
<meta name="theme-color" content="#06051A">
<title>RISE — Audiovisual Reader</title>
<link rel="icon" href="https://rise.syberlabs.io/favicon.ico" sizes="any">
<link rel="icon" type="image/png" sizes="32x32" href="https://rise.syberlabs.io/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://rise.syberlabs.io/favicon-16x16.png">
<link rel="apple-touch-icon" sizes="180x180" href="https://rise.syberlabs.io/apple-touch-icon.png">
<meta property="og:type" content="website">
<meta property="og:site_name" content="RISE">
<meta property="og:title" content="RISE — Audiovisual Reader">
<meta property="og:description"
content="A text does not have to appear only as a page. Curated texts, paced reading, and museum imagery arranged around the words.">
<meta property="og:url" content="https://rise.syberlabs.io/">
<meta property="og:image" content="https://rise.syberlabs.io/og-cover.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="RISE — Audiovisual Reader">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="RISE — Audiovisual Reader">
<meta name="twitter:description"
content="A text does not have to appear only as a page. Curated texts, paced reading, and museum imagery arranged around the words.">
<meta name="twitter:image" content="https://rise.syberlabs.io/og-cover.png">
<link rel="canonical" href="https://rise.syberlabs.io/">
<!-- The chrome's two faces, latin only: Instrument Sans (one variable file
for 400/500/600) and Instrument Serif. Everything else swaps in. -->
<link rel="preload" href="https://rise.syberlabs.io/fonts/instrument-sans-normal-2ee17598.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="https://rise.syberlabs.io/fonts/instrument-serif-normal-5eb09b5a.woff2" as="font" type="font/woff2" crossorigin>
<!-- The saved colourway, before first paint. A file, not inline: the
policy is script-src 'self'. Must stay ahead of the stylesheet. -->
<!-- Styles imported via app.js module -->Published from docs/assets/directory/INSPECTOR-RUN-2026-10-10.md. Edits made here are overwritten on the next push to main.
Start here
- COMPOSER-FIRST-ROADMAP
- VISION
- PROJECT-KNOWLEDGE
- ARCHITECTURE
- SYSTEM-DESIGN-REVIEW-2026-08-22
- ACCOUNT-SAVES
- RELEASING
- PLUS-CUSTOMER-LIFECYCLE
- AGENTS
Release
Pilot
- LIVE-CURRENT
- LIVE-HANDOFF
- LIVE-MCP
- DIRECTORY-SCREENSHOTS
- INSPECTOR-RUN-2026-10-10
- CLAUDE-RUN-2026-10-10
- CREATIVE-CONTROL-EVALS
- PERCEPTION-EVAL
- SOUND-LEVELS
- WORDING
- RUN-2026-10-08
- COMPOSER-INSTRUMENTS
- CHATGPT-DEMO
- EMBED-WITNESS
- RISE-GATE0
- CHATGPT-HOST-2026-10-04
- LIVE-002-HOST-2026-10-05
- EMBED-STAGE-HOST-2026-10-07
- RELEASE-GATES-2026-10-07
- EMBED-SAFETY-2026-10-05
- LIVE-GEMINI
- LIVE-EVALUATION
- LIVE-RED-TEAM
- CURRENT-CONSOLIDATION
- RISE-CHANGES
The Archive - texts and their editing
- ARCHIVE-CANON-SPEC
- ARCHIVE-CLEANSING-SPEC
- CORPUS-REVIEWER-PROMPT
- TYPESETTING-CANON
- PHRASE-CHUNKING-STUDY
- CHUNKER-AWARENESS-STUDY
- LIBRARY-SPEC
- SOL-PD-ACQUISITIONS-DOSSIER-LITERATURE-2026-07-28
Authoring - scores, rooms, and rendering
- EXPERIENCE-PROGRAM-SPEC
- LIVE-CURRENT-EVENTS-V1
- RISE-CURRENT-V1-SLICE
- RISE-SDK
- SCRIPTORIUM-SPEC
- WORKSHOP-COMPOSITION-STUDIO-SPEC
- AGENT-COMPOSITION-AND-RENDER-SPEC
- NARRATION-LANE-SPEC
- RECITATION-SPEC
- SCRIPTORIUM-STRENGTHENING-SPEC
Reading surfaces
- PAGE-MODE-SPEC
- RHYTHMIC-VISUAL-PRESENCE-SPEC
- LATERAL-TRAVERSAL-SPEC
- CONTINUOUS-FIELD-SPEC
- JEV-VARIANCE
- INVOCATION-SKINS
- PHASE-2-SAFETY-SPEC
- SPATIAL-CHAMBER-SPEC
- Premium_Mobile_Chamber
Imagery - what may be shown, and on whose authority
- MUSEUM-ATLAS
- SOURCE-CURATION-SPEC
- SOURCE-EXPANSION-SPEC
- ATRIUM-IMAGERY-SPEC
- PERICOPE-IMAGERY-SPEC
- icon-museum-request-draft
- TEXT-ATTUNED-IMAGERY-SPEC
The Chapel
Direction and unbuilt work
Affect and the Emotions room
Reading decision service and retired gate
Product direction and team tracking
- README
- READER-DIRECTION
- CONSOLIDATED-READER
- COMPOSER-FIRST-ROADMAP
- TRACKER-DESIGN
- 2026-10-03-direction-decisions
- 2026-10-04-composer-decision
- 2026-10-05-consolidated-reader-decisions
- 2026-10-05-embed-stage-decision
- 2026-10-06-score-speech-service-roadmap
- 2026-10-07-current-with-a-look
- 2026-10-07-reader-control-and-replay
- 2026-10-05-one-colour-vocabulary-design
- 2026-10-07-chrome-follows-theme
- 2026-10-07-gallery-follows-with-works
- 2026-10-05-canonical-home-design
- 2026-10-04-reader-evidence
- 2026-10-original-performance-roadmap
- 2026-10-08-voice-hardening-2-findings
- 2026-10-09-feelings-sounds-parked
- 2026-10-10-connector-directory-readiness
- 2026-10-10-connector-submission-packet