The Model Context Protocol (MCP) is an open standard that lets AI assistants call external tools as part of a conversation. Two MCP servers together cover the full ReliaPlotR analysis pipeline:
ReliaPlotR server —
reliapltr_mcp_server() — life data and ALT analysis:
| Tool | What it does |
|---|---|
fit_weibull |
Fit a Weibull or lognormal distribution to time-to-failure data and return parameter estimates |
fit_alt |
Fit an ALT model across multiple stress levels and return life-stress relationship coefficients |
plot_weibull |
Fit a distribution and return a Weibull probability plot as a plotly JSON string |
plot_alt |
Fit an ALT model and return probability and life-stress plots as plotly JSON strings |
plot_rga |
Fit a Crow-AMSAA model and return a cumulative failure plot as a plotly JSON string |
ReliaGrowR server — rga_mcp_server() —
reliability growth and repairable systems:
| Tool | What it does |
|---|---|
rga |
Fit Crow-AMSAA reliability growth model; returns λ, β, and goodness-of-fit stats |
nhpp |
Fit a Power Law or Log-Linear NHPP process; returns model parameters |
duane |
Fit a Duane log-log growth model; returns slope, intercept, and GOF stats |
mcf |
Compute Nelson-Aalen MCF for repairable systems; returns time, MCF, and bounds |
predict_rga |
Forecast cumulative failures from a fitted Crow-AMSAA model |
predict_duane |
Forecast MTBF from a fitted Duane model |
rdt |
Reliability demonstration test planning — solve for required sample size or test time |
gof_rga |
Goodness-of-fit statistics (CvM, KS) for a Crow-AMSAA model |
mcptools and ellmer are optional
dependencies listed in Suggests. Install them before
starting the server:
Once the packages are installed, register both servers in your Claude Code session.
ReliaPlotR server (life data and ALT analysis):
# Option 1: inline (works with any R installation)
claude mcp add -s user reliapltr -- \
Rscript -e "ReliaPlotR::reliapltr_mcp_server()"# Option 2: bundled launcher script (after package installation)
claude mcp add -s user reliapltr -- \
Rscript $(Rscript -e "cat(system.file('mcp/server.R', package='ReliaPlotR'))")ReliaGrowR server (reliability growth and repairable systems):
Confirm both servers are registered:
Once registered, Claude Code will offer all tools automatically whenever it detects a reliability analysis task.
fit_weibull Toolfit_weibull fits a Weibull or lognormal distribution to
a vector of failure times, optionally with right-censored (suspension)
data, and returns parameter estimates and a goodness-of-fit metric.
| Argument | Type | Default | Description |
|---|---|---|---|
failures |
numeric array | required | Failure times (positive numbers) |
suspensions |
numeric array | NULL |
Right-censored times – units still operating at end of test |
dist |
string | "weibull" |
Distribution: "weibull", "lognormal", or
"weibull3p" |
method_fit |
string | "mle" |
Estimation method: "mle" (recommended for censored
data) or "rr-xony" (rank regression) |
method_conf |
string | "lrb" |
Confidence bounds: "lrb" (likelihood-ratio, requires
MLE) or "fm" (Fisher-matrix). Automatically switches to
"fm" when rank regression is used. |
The following shows what the tool returns when called from an MCP client. The same function can be invoked directly in R for testing:
# Five machines that failed at these times (hours)
tool <- ReliaPlotR:::.make_wblr_tool()
result <- tool(failures = c(30, 49, 82, 90, 96))
str(result)
#> List of 12
#> $ dist : chr "weibull"
#> $ method_fit : chr "mle"
#> $ param1_name: chr "Beta"
#> $ param1 : num 3.2
#> $ param2_name: chr "Eta"
#> $ param2 : num 77.8
#> $ param3_name: chr NA
#> $ param3 : num NA
#> $ gof_metric : chr "loglikelihood"
#> $ gof_value : num -23.2
#> $ method_conf: chr "lrb"
#> $ n_failures : int 5The flat named list is serialized to JSON when returned over MCP.
param1 is the Weibull shape parameter \(\beta\); param2 is the
characteristic life \(\eta\).
Adding right-censored suspensions shifts the estimates to account for units that did not fail:
fit_alt Toolfit_alt runs the full ALT pipeline
(alt.make → alt.parallel →
alt.fit) across multiple stress levels and returns
per-stress-level parameters alongside the fitted global life-stress
relationship.
| Argument | Type | Default | Description |
|---|---|---|---|
stresses |
numeric array | required | One stress value per stress level,
e.g. [300, 350, 400] |
failures_json |
string | required | JSON array of failure-time arrays, one inner array per stress level.
Example: '[[248,456,528],[164,176,289],[88,112,152]]' |
dist |
string | "weibull" |
Life distribution: "weibull" or
"lognormal" |
alt_model |
string | "arrhenius" |
Life-stress model: "arrhenius" (temperature) or
"power" (non-thermal) |
tool_alt <- ReliaPlotR:::.make_alt_tool()
result_alt <- tool_alt(
stresses = c(300, 350, 400),
failures_json = "[[248,456,528,731,813,537],[164,176,289],[88,112,152]]",
dist = "weibull",
alt_model = "arrhenius"
)# Per-stress-level parameter estimates
result_alt$parallel
#> stress P1 P2 wt n_failures
#> 1 300 615.9660 3.935945 6 6
#> 2 350 231.8588 3.935945 3 3
#> 3 400 128.0115 3.935945 3 3
# Global Arrhenius life-stress relationship coefficients
result_alt$relationship
#> $model
#> [1] "arrhenius"
#>
#> $coef1
#> [1] 11.20605
#>
#> $coef2
#> [1] -0.01605895The P1 column in $parallel is the
characteristic life \(\eta\) at each
stress level (for Weibull) or \(\exp(\mu_{\log})\) (for lognormal). The
P2 column is the shape parameter \(\beta\), constrained to be equal across
stress levels. The $relationship coefficients
coef1 and coef2 define the log-linear
life-stress model (Nelson 1990).
The three plot_* tools run the full fitting pipeline and
return an interactive plot as a plotly JSON string. Claude Code (or any
MCP client) can save the string to an .html file that opens
directly in a browser.
plot_weibull Toolplot_weibull accepts the same arguments as
fit_weibull plus an optional show_conf flag,
and returns the probability plot as a JSON string.
plot_alt Toolplot_alt accepts the same arguments as
fit_alt and returns a named list with two JSON strings:
probability_plot (one fitted line per stress level) and
life_stress_plot (Arrhenius or Power Law relationship).
plot_rga Toolplot_rga fits a Crow-AMSAA model to failure count data
and returns the cumulative failure plot.
ptool_rga <- ReliaPlotR:::.make_plot_rga_tool()
json_rga <- ptool_rga(
times = c(100, 200, 300, 400, 500),
failures = c( 2, 1, 3, 1, 2)
)
#> No trace type specified:
#> Based on info supplied, a 'scatter' trace seems appropriate.
#> Read more about this trace type -> https://plotly.com/r/reference/#scatter
#> No trace type specified:
#> Based on info supplied, a 'scatter' trace seems appropriate.
#> Read more about this trace type -> https://plotly.com/r/reference/#scatter
#> No trace type specified:
#> Based on info supplied, a 'scatter' trace seems appropriate.
#> Read more about this trace type -> https://plotly.com/r/reference/#scatter
nchar(json_rga)
#> [1] 5254Each MCP tool wraps the same fitting pipeline used by the
corresponding plotly_* function:
fit_weibull: wblr() -> wblr.fit() -> wblr.conf() -> tidy_wblr() -> named list
fit_alt: alt.make() -> alt.parallel() -> alt.fit() -> tidy_alt() -> named list
plot_weibull: wblr() -> wblr.fit() -> wblr.conf() -> plotly_wblr() -> plotly JSON
plot_alt: alt.make() -> alt.parallel() -> alt.fit() -> plotly_alt()
-> plotly_rel() -> plotly JSON × 2
plot_rga: rga() -> plotly_rga() -> plotly JSON
The accessor functions (tidy_wblr(),
tidy_alt(), tidy_rga()) can also be called
directly from R to extract parameter estimates from already-fitted model
objects without going through MCP.
The ReliaGrowR server exposes eight tools for reliability growth
analysis and repairable systems. Register it with
claude mcp add -s user reliagrowR -- Rscript -e "ReliaGrowR::rga_mcp_server()".
| Tool | Arguments | Returns |
|---|---|---|
rga |
times, failures, times_type,
method |
λ, β, growth rate, log-likelihood, AIC, BIC |
nhpp |
time, event, model_type,
method |
model type, method, fitted parameters, GOF stats |
duane |
times, failures,
conf_level |
slope, intercept, GOF stats |
mcf |
id, time, event,
conf_level |
time points, MCF values, confidence bounds |
predict_rga |
times, failures,
forecast_times, method,
conf_level |
forecast cumulative failures with bounds |
predict_duane |
times, failures,
forecast_times, conf_level |
forecast MTBF with bounds |
rdt |
target, mission_time,
conf_level, beta, f,
n, test_time |
required sample size or test duration |
gof_rga |
times, failures, method |
Cramér-von Mises (W²) and Kolmogorov-Smirnov (D) statistics |