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.
After restarting the MCP server (or restarting Claude Desktop), paste each prompt below into Claude Desktop one at a time. Expected behavior is described after each prompt.
Prompt:
Are you connected to Brightspace?
Expected: Claude calls auth_status.
Response shows "authenticated": true. If false, run
bs_auth() in an interactive R session first.
Prompt:
What datasets are available? List them for me.
Expected: Claude calls list_datasets.
You see a list of all BDS dataset names with descriptions. Should be
dozens of datasets.
Prompt:
Find any datasets related to grades.
Expected: Claude calls search_datasets
with keyword “grade” (or similar). Returns a filtered list – should
include “Grade Results” and possibly others.
Prompt:
Describe the Users dataset. What columns does it have?
Expected: Claude calls describe_dataset
with name “Users”. Response should show:
execute_rPrompt:
How many users are there in total?
Expected: Claude calls execute_r with
something like:
Returns a single number. No raw data transfer.
Prompt:
Show me the top 10 most common role names in the User Enrollments dataset.
Expected: Claude calls execute_r with a
dplyr pipeline like:
Returns a compact text table (not JSON, not thousands of rows).
Prompt:
Now filter those enrollments to just Students and tell me how many there are.
Expected: Claude uses variables from the previous call (or re-loads and filters). The key test is that Claude can reference or build on prior work. Should return a count.
Prompt:
Create an interactive bar chart showing enrollment counts by role.
Expected: Claude should:
execute_r to compute the counts (e.g.,
count(role_name, sort = TRUE))writeLines() to the output directorybrowseURL() to open itThe response should include the HTML file path. Opening it shows an interactive bar chart with tooltips and hover effects.
Prompt:
Use ggplot to create a bar chart of enrollment counts by role. Return the plot object.
Expected: Claude calls execute_r with
ggplot code (no ggsave()). The server detects the ggplot
object and saves it as PNG + HTML viewer. Response should include:
This tests the static chart fallback for when Chart.js is not suitable.
Prompt:
Give me a quick summary of the Grade Results dataset.
Expected: Claude calls get_data_summary
with dataset “Grade Results”. Returns row/column counts and per-column
statistics. Footer suggests execute_r for custom
analysis.
Prompt:
Summarize the User Enrollments dataset, but only for the “Student” role.
Expected: Claude calls get_data_summary
with:
{"role_name": "Student"}Returns stats for the filtered subset only. Row count should be less than the full dataset.
Prompt:
Break down User Enrollments by role_name. How many of each role are there?
Expected: Claude calls get_data_summary
with:
["role_name"]Returns group counts sorted by frequency (Student, Instructor, etc.). May also show numeric column means per group.
Prompt:
Join the Users and User Enrollments datasets. How many courses is each user enrolled in on average?
Expected: Claude calls execute_r with
something like:
users <- bs_get_dataset("Users")
enrollments <- bs_get_dataset("User Enrollments")
joined <- bs_join(users, enrollments)
joined %>%
group_by(user_id) %>%
summarise(n_courses = n_distinct(org_unit_id)) %>%
summarise(
mean_courses = mean(n_courses),
median_courses = median(n_courses)
)Returns a small summary table.
Prompt:
Run this R code:
nonexistent_function(123)
Expected: Claude calls execute_r. The
result should have isError: true with a message like “could
not find function ‘nonexistent_function’”. Claude should explain the
error gracefully.
Prompt:
I want a complete analysis of grade performance. First describe the Grade Results dataset so I understand the columns, then show me the distribution of final grades as a histogram, and finally give me the mean grade broken down by org_unit_id (show the top 10).
Expected: Claude makes 3+ tool calls in sequence:
describe_dataset or execute_r to explore
columnsexecute_r with ggplot histogram – inline image
appearsexecute_r with grouped summary – text table of top
10This tests the full workflow: discover, visualize, summarize.
Prompt:
Use the get_dataset tool to download the Users table.
Expected: Claude should NOT have access to
get_dataset (it was removed). Instead it should either:
execute_r to load the data:
bs_get_dataset("Users") %>% head(20)get_data_summary for statsget_dataset, the server returns “Unknown
tool” errorPrompt:
What schemas are registered and what are their key columns?
Expected: Claude calls list_schemas.
Returns a list of schema names with their key columns (the foreign keys
used by bs_join()).
Server won’t start:
claude_desktop_config.json has the right path to
server.Rcwd points to the directory with
config.ymlRscript /path/to/server.R manually to see stderr
errorsAuth fails:
library(brightspaceR); bs_auth() to get a tokenPlots don’t render:
png() graphics device is available (it
should be on all standard R installs)grDevices::png()Results are truncated:
head() or
filter() in execute_r to narrow resultsThese 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.