The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
MCP endpoint keeps a call log for each running app
in the cache folder,
MCP-logs/date-<start time>_app-<app id>/mcp-calls.log:
one line (at most 300 characters) per request, reply, or failure, with
the tool, the JSON-RPC id, the time taken, and the
arguments, result, or reason. The stdio proxy adds the calls that never
reach an app, marked (proxy). Turn the log off with
options(shidashi.mcp_log = FALSE) or the environment
variable SHIDASHI_MCP_LOG=false; the newest
getOption("shidashi.mcp_log_keep", 50) folders are
keptlogs/server-info.log in its folder
(app id, process id, port, addresses, and call log folder). It and the
app record are removed when the app stops, so an app stopped inside an R
session that keeps running no longer leaves a record behindregister_input() gains hint (one of
input_hint_classes): whether agents ask the user for an
input before loading data or running the analysis, keep its default, or
leave it alone. shiny_input_info returns each input’s hint,
takes a hints filter, and reports session state registered
with the new register_input_state() under
@stateswitch_module and module
tool calls give the agent the app’s address as a one-click linkrave skill: how agents find a
running RAVE app, open it in the browser, and what to ask
before loading datamcp_click(): clicks an element for an agent and
reports whether it matched, was clicked, or was refused; the browser
refuses elements inside [mcp-agent-disabled="true"]
(controls for people only). shiny_input_update clicks
buttons through it, so a refused or missing button now fails the tool
callcolormapSelectInput() can no longer be emptied:
Backspace/Delete keep the selected color map, an update with an empty
selected restores the previous value (or the first color
map), and a selected outside the choices selects the first
oneshiny select
input;plotOutput2;MCP endpoint so agents such as
Claude Code can drive the dashboard without session
binding:
agents/tool-schema.yaml_module argument, else the module tab the
user pinned with the new pin button, else the one the user used most
recently; results end with a note naming the modulelist_shinysessions,
register_shinysession, get_session_info, and
ask_user MCP tools; added
shidashi_sessions (open modules and the default one) and
shidashi_call (tools that exist only in live sessions)Mcp-Session-Id;
/mcp/{module} limits a connection to one module (a module
id or a handle)MCP, tools carry
readOnlyHint and destructiveHint annotations
and a note, and the agent asks the user in its own chat, never in the
browser; tools turned off in agents.yaml stay off--app and --module,
and always replies to a requestshidashi_connect,
shidashi_disconnect); its tool list follows the attached
app, and shidashi_tools lists the app’s tools for clients
that do not refresh their tool list<module>@<token>), so a handle stays the same
when the user opens the module again in another tabswitch_module meta tool: it shows a module in
the user’s dashboard as clicking it in the sidebar does (its open tab
comes to the front, or it opens in a new tab;
auto_new = FALSE only switches to an open tab), and returns
once the module’s page has loaded (options
shidashi.switch_module_timeout and
shidashi.switch_module_wait); it is refused while the user
has a module pinnedswitch_module() also works when the dashboard sits in a
frameswitch_module() gains auto_new: with
auto_new = FALSE it only switches to a module whose tab is
openmcp_call_active(): it is TRUE
while a tool runs for an MCP call, and while it is, the
environment variable SHIDASHI_USING_MCP is
"TRUE" (removed when the call returns), so tools and skill
scripts can behave differently for agents, for example print lessskill_load__<name>
reads the instructions and reference files and never changes anything,
and skill_run__<name> runs the scripts;
skill_wrapper() returns both (load,
run); in the dashboard chat, a script marked destructive in
agents.yaml now asks for confirmation# Usage:
header comment; skill_run__<name> lists each script’s
usage and refuses a call that leaves out a required argument; files in
scripts/ whose names start with _ are helpers,
not scriptsenvs)
are now added to the app’s environment instead of replacing it, so the
script keeps PATH, HOME, and
SHIDASHI_USING_MCPsave_launcher() and run_launcher():
saved apps are kept in one launchers.json file in the
shidashi cache folder, optionally with a copy of the app
(copy_app = TRUE) and free-form metadata; the
MCP proxy lists saved apps
(shidashi_launchers) and, when the user picks one, starts
it and opens the chosen module in the browser
(shidashi_launch)shiny_query_ui now returns the element’s HTML or image
in one call; shiny_query_ui_result is removed;
transform_image = FALSE asks for HTML only, and long HTML
is trimmed (image data and scripts shortened, max_chars
sets the limit)shiny_output_result MCP tool: it
returns a registered output’s rendered content even when the output is
in a hidden tab or a collapsed card, rendering it first (waiting up to
10 seconds; option shidashi.output_result_timeout); a plot
that was never shown is drawn at a fallback size;
shiny_query_ui notes when an element is not shown or shows
an error; outputs registered with
download_type = "htmlwidget" also return the widget data
(x), since a widget such as a DT table shows
only one page of it, and outputs registered with
download_type = "data" also return what
download_function writes; both are trimmed by
max_charsrender_hidden_output(), which renders one output
at the next flush even when it is hidden, then restores
suspendWhenHiddenshiny_query_ui and shiny_output_result ask
the browser after a short pause (option
shidashi.query_ui_delay, default 0.1 seconds): agents often
send a change and a query in one turn as concurrent requests, which
R may take in either order, and the pause lets the change
reach the page firstbslib-bare template, shiny_query_ui
and shiny_output_result ask a threeBrain
viewer for pictures of its WebGL or WebGPU
canvases: they dispatch one viewerApp.captureOnce event on
the viewer’s wrapper (.threejs-brain-canvas) with an empty
object as detail, and the viewer draws a frame and adds
{ canvas, dataURI } to detail.views for each
view it drew. When the viewer has not answered after three animation
frames, and for any other canvas, the canvas is read directly as before.
Such canvases used to come back blank in Chromium, or out
of date in browsers that keep the last frame. A page that draws no
frames (for example in a background tab) is read after half a second,
with a noteshidashi’s own observers are reported as
warnings instead of ending the user’s sessionregister_input() gains tooltip, shown when
the mouse hovers over the input (its title); it defaults to
the first sentence of description (new
as_tooltip()), and tooltip = NULL turns it
off; only inputs get it, so other registered elements, such as cards,
are unchangedstream_viz htmlwidgets widget for
real-time multi-channel signal viewing; binary stream files are produced
by stream_to_js() and fetched by the browser via
fetchStreamData(); rendering engine switched from
D3 to Three.js (WebGL) for
improved performance on high-density multi-channel datastream_init() sets up
per-session stream directories with automatic cleanup;
stream_path() returns the token-qualified file path;
stream_file_id() builds the {token}_{ns(id)}
identifier used by both R and JSstream_to_js() for writing binary envelope files
(supports raw, json, int32,
float32, float64 body types) and
read_stream_vis() for reading them back in RstreamVizOutput() /
renderStreamViz() / updateStreamViz() Shiny
bindings for the stream_viz widgetregister_output() is now a server-side function: it
assigns the render function, registers the MCP output spec,
and injects download/pop-out widget icons via JS overlay
(no UI-side wrapper needed)JS; download modal supports image,
htmlwidget, threeBrain, data, and
stream_viz typesserver_standalone_viewer() — a hidden module that
re-renders a parent session’s output in a standalone browser tab
(pop-out window), forwarding inputs back to the original module
sessionfire_event() and get_event() for a
reactive session event bus; events can be scoped locally (per-session)
or globally (cross-tab broadcast via shared_id);
get_theme() is a convenience wrapper that returns the
current dashboard themeregister_session() /
unregister_session() for comprehensive session life-cycle
management with automatic cleanup, reactive event bus setup, and
cross-tab synchronization support; replaces the deprecated
register_session_id()get_handler() / set_handler() for
managing named session-scoped Observer objects with a
shared registry; handlers are automatically destroyed on session
endenable_input_broadcast() /
disable_input_broadcast() and
enable_input_sync() / disable_input_sync() for
opt-in cross-tab input state synchronization; broadcast publishes the
current session’s inputs for peer tabs, sync restores inputs from a peer
sessionswitch_module() to programmatically navigate to
another module from server-side code; supports cross-iframe
forwarding via JS postMessagecard_badge() UI component for dynamic badge
widgets in card headers; set_card_badge() updates badge
text and styling from the server without re-rendering;
card_recalculate_badge() creates a clickable “recalculate
needed” badge with enable_recalculate_badge() /
disable_recalculate_badge() toggleshtml_asis() for escaping HTML special characters
to display strings literally; combine_html_class() merges
and remove duplicated class strings; remove_html_class()
removes specified classes from a class stringshared_id is now unified and shared across UI and
server via init_app(); resolved from URL query string, R
option, environment variable, or auto-generatedtools,
output_renderers, handlers) now use
fastmap for O(1) lookup and efficient memory
management_captureSVG() helper in JS to
convert SVG (raster) elements (e.g. D3 output)
to PNG data URLs for the query-UI toolshidashi.set_shiny_input JS message
handler for programmatic cross-session input forwardingshidashi.switch_module JS message
handler for programmatic module navigation from JSshidashi.register_output_widgets JS
message handler that injects the download/pop-out overlay icons on
registered outputsoutput_widgets,
stream_viz, and session_events; added hidden
standalone_viewer modulehtmlwidgets to Importsregister_output()MCP tool request not handled
correctly in chat-botMCP tool-call results for dashboard
displayellmer and
shinychat; supports multiple providers, in-memory
conversation history, mode-based tool permissions, token/cost display,
and early-stop controlsinit_chat() to create an ellmer
Chat object from R options
(shidashi.chat_provider, shidashi.chat_model,
shidashi.chat_system_prompt,
shidashi.chat_base_url)MCP (Model Context Protocol) proxy server
(inst/mcp-proxy/) so external LLM clients can
interact with a running Shiny application via MCPmcp_wrapper() to register an MCP
endpoint for a Shiny moduleregister_input() / register_output()
helpers to expose Shiny inputs and outputs as MCP tool
parameters with descriptionsskill_wrapper() parses and runs
reusable agent skill scripts; skill working directory is resolved
relative to the skill foldermodule_drawer(), drawer_open(),
drawer_close(), and drawer_toggle() for
controlling a slide-in drawer panelmodule_info() now returns richer per-module metadata;
added current_module() and active_module()
helpers for querying the active Shiny moduleagents.yaml for declaring
agent configurations (tools, skills, auto-approve rules)MCP host can be a remote server; fuzzy module reference
is supported when resolving module IDsaiagent,
filestructure, and mcpsetupellmer content helpers: S7 generic
ellmer_as_json() for ContentText,
ContentImageInline, ContentImageRemote, and
ContentToolResult; and content_to_mcp() for
converting chat content to MCP responsesMCP server query-UI tool responsenpm audit fix to bundled
JavaScript dependenciesshared- when loading
modulesaccordion and card_tabset not
working properly when inputId starts with digitsnpm to compileuserData instead of
risky cacheWindowsURL respects domain now and is generated with
relative pathrstudio-server nowflex_containeriframe height not set correctlytraceback, helping debug
the errorsflex_break to allow wrapping elements in flex
containerremove_class to remove HTML class
from a stringdata-title to cardsNEWS.md file to track changes to the
package.These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.