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.

io.github.bayesian-energy/convexity-mcp

NPM · CONVEXITY-MCP · SCANNED SEP 20

Build, edit, solve and analyse Convexity energy-system models from any MCP client; drives the app.

Available components

0 this week 64 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 24 of 51 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency6
Schema Quality & AI Usability86
  • 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 7212 tokens (~118/item across 61 items; 39 tools + 22 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 Management0
  • Stability check failed: the tool surface changed between 0.2.1 and 0.6.0: 61 tool removals, 0 breaking changes, 21 additions. See how to fix → Fail
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 85% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 39 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.bayesian-energy/convexity-mcp server?

io.github.bayesian-energy/convexity-mcp runs locally as an npm package, launched with npx -y convexity-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · convexity-mcp

# add to Claude Code
claude mcp add bayesian-energy-convexity-mcp -- npx -y convexity-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "bayesian-energy-convexity-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "convexity-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "bayesian-energy-convexity-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "convexity-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add bayesian-energy-convexity-mcp -- npx -y convexity-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "bayesian-energy-convexity-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "convexity-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add bayesian-energy-convexity-mcp --command npx --arg -y --arg convexity-mcp
# ~/.hermes/config.yaml
mcp_servers:
  bayesian-energy-convexity-mcp:
    command: "npx"
    args: ["-y", "convexity-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "bayesian-energy-convexity-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "convexity-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add bayesian-energy-convexity-mcp -t stdio -c npx -a -y convexity-mcp
// mcp.json
{
  "mcpServers": {
    "bayesian-energy-convexity-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "convexity-mcp"
      ]
    }
  }
}
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.

  • 9 Sept 26 +15
    • Malware scan: unverified → pass security
  • 8 Sept 26 −15
    • Malware scan: pass → unverified security
    • Schema quality: 142 → 118 functional
    • Destructive annotations: 0 → pass functional
    • Package version: 0.5.0 → 0.6.0 functional
  • 7 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 11 to 14.

  • 6 Sept 26 +15
    • Malware scan: unverified → pass security
  • 5 Sept 26 −4
    • Malware scan: pass → unverified security
    • Known CVEs: unverified → pass security
    • Dependency health: unverified → 0.81 functional
    • Package version: 0.4.1 → 0.5.0 functional
  • 4 Sept 26 +7
    • Stability: 0.03 → unverified security
    • Known CVEs: pass → unverified security
    • Tool safety: pass → unverified security
    • Stability: 0.03 → fail security
    • Malware scan: unverified → pass security
    • Schema quality: 15158 → 19426 functional
    • Tool coverage: 95% → 86% functional
    • Tool coverage: 95% → 88% functional
    • Dependency health: 0.81 → unverified functional
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: 15158 → 11732 functional
    • First check of Schema quality: unverified functional
    • First check of Schema quality: 100 functional
    • Package version: 0.3.0 → 0.4.1 functional
    • Package version: 0.3.0 → 0.4.0 functional
  • 3 Sept 26 −15
    • Malware scan: pass → unverified security
    • Tool coverage: 100% → 95% functional
    • Schema quality: 12950 → 15158 functional
    • Stability: unverified → 0.03 functional
    • Package version: 0.2.1 → 0.3.0 functional
  • 2 Sept 26 60

    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 20 Sept 2026 · Analysed npm/convexity-mcp@0.6.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 51 packages
Packages resolved 51
Deprecated 1
Stale 23
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 39 exposed · ~5,524 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
account_status ~63

The signed-in Convexity account: which cloud features the organisation has enabled (cloud solve, solvers, data APIs, playbook signing, MCP access) and which Modelverse models it may open. Call it before promising a cloud feature, or to explain a refusal.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

app_state ~54

Whether the Convexity desktop app is running, its version, the model it currently has loaded, and whether its solve backend is up. Cheap; call it before choosing between the app (free, live) and the cloud.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

cloud_solve_cancel ~34

Cancel a queued or running cloud solve. Billing stops once the machine is released.

NameTypeReqDescription
job_uuidstringyes

No output schema declared.

No examples provided.

cloud_solve_fetch_result ~115

Download a SOLVED cloud job into a new file beside the source model (<model>_solved.db, never overwriting the original) and make it the active model, so the results tools read from it. Pass save_path to choose the destination.

NameTypeReqDescription
job_uuidstringyes
overwritebooleanAllow save_path to replace an existing file.
save_pathstringAbsolute .db path for the solved model. Default: a _solved sibling of the model that was submitted.

No output schema declared.

No examples provided.

cloud_solve_logs ~81

Solver output of a cloud solve (structured log lines, newest page first via page_token). Use it to explain a FAILED or INFEASIBLE job or to report progress; keep page_size small.

NameTypeReqDescription
job_uuidstringyes
page_sizeinteger
page_tokenstringnext_page_token from a previous call.

No output schema declared.

No examples provided.

cloud_solve_machines ~64

List the cloud machine sizes available for cloud_solve_submit with their vCPUs, memory, parallel-scenario capacity and hourly price in GBP (the charged rate). Call this before submitting so you can tell the user what a solve will cost; never guess prices.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

cloud_solve_status ~65

Status of a cloud solve: phase, timings, per-scenario progress and any error. Without job_uuid, lists the cloud solves submitted from this machine (newest first) so you can find the id.

NameTypeReqDescription
job_uuidstringFrom cloud_solve_submit.

No output schema declared.

No examples provided.

cloud_solve_submit ~287

Solve the open model in the Convexity cloud (paid per hour of machine time; needs a signed-in account with cloud solve enabled). Quote cloud_solve_machines first; pass wait: true to block until it finishes, then cloud_solve_fetch_result brings the solved model back beside the original.

NameTypeReqDescription
confirm_costbooleanRequired true for machine sizes above s: confirms the user has seen the hourly price and agreed.
machine_sizestringCloud machine size from cloud_solve_machines. Default xs.
max_run_duration_secondsintegerWall-clock cap for the whole job; the job is killed past it. Omit for the service default (1 hour).
max_workersintegerScenarios solved in parallel on the machine (bounded by its capacity). Omit for the size default.
scenario_idsarrayScenario ids to solve (null = base case). Omit to solve the active scenario.
solver_namestringSolver engine. 'highs' is free and always available; 'mosek' needs the entitlement on the account.
timeout_secondsintegerWith wait: give up waiting after this long (default 900).
waitbooleanBlock until the cloud job is terminal (progress is reported), then return its status. Default false: return once submitted.

No output schema declared.

No examples provided.

compare_scenarios ~220

Compare two or more scenarios on one metric, by technology, in a single call — use this for any "compare scenario A vs B" request instead of reading each scenario separately and subtracting by hand. Returns an aligned per-technology table of values for each scenario plus signed deltas against the baseline (the FIRST scenario, usually the Base Scenario). Read-only; only over solved scenarios.

NameTypeReqDescription
bus_idintegerOptional bus id to restrict the comparison to one location.
metricstringyesWhat to compare by technology: generation (MWh), capacity (MW), capital_cost / operating_cost / system_cost (€), emissions (tCO2), or financial metrics: revenue (€), market_value / lcoe (€/MWh), capt…
scenario_idsarrayyesTwo or more scenarios to compare. Each is a scenario id number or the string "base" for the Base Scenario. The FIRST is the baseline that deltas are measured against (usually "base").

No output schema declared.

No examples provided.

create_components_batch ~120

Create many components in one call: each item names its type (bus, generator, load, link, storage_unit, carrier) and its fields; any other key is set as a static attribute. Buses need latitude and longitude; generators, loads and storage units take their bus's position unless given one. Carriers, then buses, then the rest are created in order, so references resolve; a line is a link with p_nom. PROCESS is read-only here.

NameTypeReqDescription
itemsarrayyes
stop_on_errorboolean

No output schema declared.

No examples provided.

create_model ~195

Create a brand-new blank Convexity model at an absolute .db path (must not already exist) and make it the active model. Sets the time axis (naive-UTC timestamps) and seeds the default carrier set. Use this when the user wants to build a model from scratch — no need to ask them to create a file in the app first.

NameTypeReqDescription
descriptionstringModel description.
end_timestringyesAxis end (inclusive), "YYYY-MM-DD HH:MM:SS" (UTC).
namestringyesModel name.
pathstringAbsolute path for the new .db. Default: ~/models/<name>.db, the folder the Convexity app shows.
start_timestringyesAxis start, "YYYY-MM-DD HH:MM:SS" (UTC).
time_resolution_minutesintegerPeriod length in minutes (default hourly).

No output schema declared.

No examples provided.

create_scenario ~212

Create a new scenario in the network. Use this to set up ensembles or sensitivity analyses. The returned scenario_id is what every other tool's scenario_id takes (solve, results, attributes, timeseries); the base case is scenario_id omitted or "base". After creating a scenario, use set_component_attribute with scenario_id to override attribute values. ENSEMBLE CONVENTION: To create an ensemble, use '/' in the name: 'ensemble_name/member_name'. For example, to create a 'climate' ensemble with 3 members, call create_scenario three times with names 'climate/dry', 'climate/wet', 'climate/normal'. The app automatically groups scenarios sharing the same prefix into an ensemble.

NameTypeReqDescription
descriptionstringOptional description of the scenario
namestringyesName of the scenario (e.g. 'High Prices', 'Ensemble Member 1')
probabilitynumberOptional probability weight (0–1) for ensemble scenarios.

No output schema declared.

No examples provided.

get_component_timeseries ~261

Get a compact summary of a timeseries attribute (length, min/max/mean, p05/p50/p95, zero_count, first/last 5 values, variation hint). Use for load profiles (p_set), generation (p), capacity factors (p_max_pu), marginal prices, state of charge, etc. Pass full=true ONLY when you need the raw array (e.g. to plot or inspect a specific hour) — otherwise the summary is enough to reason about shape.

NameTypeReqDescription
attribute_namestringyesName of the timeseries attribute (e.g. 'p_set', 'p', 'p_max_pu', 'marginal_price', 'state_of_charge')
component_namestringyesName of the component (e.g. 'Load3', 'Solar_Farm')
fullbooleanIf true, include the raw values array in addition to the summary. Default false — summary alone is cheap to read and enough for most reasoning.
max_pointsintegerCap on values read (defaults to 8760). The return is still summary-only unless full=true.
scenario_idintegerOptional scenario ID. If omitted, returns the timeseries for the currently-active scenario.

No output schema declared.

No examples provided.

get_model_summary ~154

Get a summary of the current model. When aggregate:true (or auto-selected for large models), returns counts by type/carrier and capacity totals without a per-row dump. When aggregate:false, returns full component rows with every set static attribute (p_min_pu, efficiencies, cyclic flags — the ones that change dispatch). Use this before EDITING a model — it replaces multiple list_components/get_attribute calls. For analysis or results, orient with assess_model and pull aggregates with get_statistic instead.

NameTypeReqDescription
aggregatebooleanIf true, return counts by type/carrier and capacity totals — no per-row component dump. If false, return full component rows with key attributes. Defaults to true when component_count > 500.

No output schema declared.

No examples provided.

get_open_model ~49

Report which model .db file this server is currently operating on, and whether it is writable or read-only (and why). Call this first when the user names a file, to check it matches.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_prices ~216

Wholesale electricity prices from the loaded solve: a load-weighted system price, a per-bus breakdown in the model's currency per MWh, and a separate scarcity line for any bus that shed load. Use it for any price question, per scenario; pass price_type "marginal" for the LP shadow price. Read-only; needs a solved scenario.

NameTypeReqDescription
bus_namesarrayOptional: restrict to these bus names (e.g. a single market zone). Omit to read every bus.
price_typestringWhich price: "clearing" (pay-as-clear wholesale price, the default) or "marginal" (LP shadow price of the power balance, includes binding constraint effects).
scenario_idinteger|stringWhich scenario to read: a scenario id number for a named scenario, or the string "base" for the Base Scenario (the as-built network — it has NO numeric id, so never pass a guessed number for it). Omi…

No output schema declared.

No examples provided.

get_solve_results ~177

Get the results from the most recent optimization solve that has been loaded into the current model. Returns status, objective value, solve time, and network statistics. Pass scenario_id to get results for a specific scenario; omit for the base case. Returns a "not solved" message when no solve has been loaded (the model has not been solved, or the solve result has not been loaded from the Jobs panel yet).

NameTypeReqDescription
compactbooleanReturn only the headline numbers and core summary, not the full per-carrier breakdown.
scenario_idinteger|stringWhich scenario to read: a scenario id number for a named scenario, or the string "base" for the Base Scenario (the as-built network — it has NO numeric id, so never pass a guessed number for it). Omi…

No output schema declared.

No examples provided.

get_summary_stats ~211

Get overall summary statistics for the current model from the loaded solve results: power/transmission/energy capacity, dispatch, emissions, capital/operational/total cost — each broken down by carrier — plus unmet load and LOLH per bus. This is the whole-horizon total; for a per-year breakdown use get_yearly_results. Pass scenario_id for a specific scenario; omit for the base case. Optionally filter to one bus. Read-only.

NameTypeReqDescription
bus_idintegerOptional bus ID to filter the summary.
include_zerobooleanKeep carriers with nothing in a table (the full matrix). Default false: only carriers with a value, so the answer is what happened.
scenario_idinteger|stringWhich scenario to read: a scenario id number for a named scenario, or the string "base" for the Base Scenario (the as-built network — it has NO numeric id, so never pass a guessed number for it). Omi…

No output schema declared.

No examples provided.

get_validation_rule ~88

Get the validation rule for a specific component type and attribute, including data type, default value, and valid range.

NameTypeReqDescription
attribute_namestringyesName of the attribute (e.g. 'p_nom', 'marginal_cost')
component_typestringyesComponent type (e.g. 'GENERATOR', 'LOAD', 'LINK', 'STORAGE_UNIT', 'BUS')

No output schema declared.

No examples provided.

get_worked_example ~408

A complete walkthrough for a common task, as text: three_bus_network (Build a small gas + wind + load network on a one-week hourly axis, then solve it locally and show the dispatch in the Convexity app.); load_demand_from_csv (Load a half-hourly regional demand file onto the matching loads of an existing model, aligned to its hourly axis.); solve_and_plot (Solve a model locally through the Convexity app, then set the Results Viewer up with a dispatch chart and a price chart and show it.); describe_model (A read-only summary of a model: component counts, capacity by carrier, whether timeseries data is loaded.); parameter_sweep (Create one scenario per value of a single attribute, solve them all locally, and compare system cost across the sweep.); unit_commitment (Turn a thermal generator into a unit-commitment unit with a minimum up time, using the attribute rules to find the right names.); compare_scenario (Create a scenario that changes one thing, solve the base case and the scenario locally, and report how system cost and prices moved.); compare_on_canvas (Solve a scenario against the base case and show both in the Analytics dashboard at once, grouped by scenario — not one at a time.); write_playbook (Write a small playbook for the open model, save it into the model, run it locally through the Convexity app, and report its outputs.); publish_playbook (Publish a playbook stored in a model as a page anyone with the link can run, with a daily run cap. Needs an API key.); run_playbook_cloud (Sign a playbook source file and run it in the cloud against a model on the smallest machine, then report its outputs. Paid; needs an API key.). The same content as the MCP prompts, for clients that do not surface prompts.

NameTypeReqDescription
namestringWhich walkthrough. Omit to list them.

No output schema declared.

No examples provided.

list_jobs ~70

Every solve job this machine knows about: the desktop app's queue (when the app is running) and the cloud jobs submitted from here, newest first, with live status. One view instead of desktop_app_jobs plus cloud_solve_status.

NameTypeReqDescription
limitintegerRows per source (default 10).

No output schema declared.

No examples provided.

list_more_tools ~106

The tools beyond the default set, by area: build (single-component edits, timeseries operations, data files, constraints, comments), analyse (statistics, carrier breakdowns, reliability, ensembles, sweeps, diagnostics), app (import/export through the desktop app), data (renewables, demand, costs, outlook). Returns their names and purposes — call any of them by name afterwards, whether or not your client refreshes its tool list.

NameTypeReqDescription
toolsetsarrayyes

No output schema declared.

No examples provided.

list_scenarios ~78

List all scenarios defined in the network, including their run status and descriptions. By default the 'Actual' scenario is excluded. Set include_actual=true when the user asks about actuals data or wants to compare actuals against other scenarios.

NameTypeReqDescription
include_actualbooleanIf true, include the 'Actual' scenario. Default is false.

No output schema declared.

No examples provided.

list_validation_rules ~148

The attribute vocabulary. With no filter: an index — per component type, the attribute groups and attribute names (cheap; start here). Pass component_type for that type's rules (data type, unit, default, required, input vs result, timeseries allowed), optionally narrowed by group_name. Use get_validation_rule for one attribute in full.

NameTypeReqDescription
component_typestringe.g. 'GENERATOR', 'LOAD', 'LINK', 'STORAGE_UNIT', 'BUS' — omit for the index.
group_namestringOnly rules in this group (group names come from the index).
names_onlybooleanWith component_type: return attribute names only.

No output schema declared.

No examples provided.

open_in_app ~127

Open a model in the Convexity desktop app and bring the app to the front — starting the app if it is not running. Defaults to the active model. Once the app has the model open, edits made here appear in it live and solve_via_desktop_app can run it locally. With no tab connected this opens the web app in the computer's DEFAULT browser, already paired.

NameTypeReqDescription
namestringWeb app: the model's name as the tab's Files panel shows it.
pathstringAbsolute .db path. Default: the active model.

No output schema declared.

No examples provided.

open_model ~79

Switch to a different Convexity model: absolute path to a .db file on disk. All subsequent tools operate on it. Edits are written in place — suggest the user works on a copy of any model they care about. Resets the active scenario to the base case.

NameTypeReqDescription
pathstringyesAbsolute path to a model .db.

No output schema declared.

No examples provided.

preview_model_map ~104

Render a map of the model as an inline image: buses at their coordinates, lines and links between them, and generators (triangles), loads (squares) and storage (diamonds) ringed around their bus. Use it to show the user the network — especially right after edits, to confirm what changed and where. Optionally pass component names to highlight.

NameTypeReqDescription
highlightarrayComponent names (buses, lines, links) to highlight and label.

No output schema declared.

No examples provided.

search_docs ~54

Search the Convexity product documentation for how features work. Use when the user asks how to do something in Convexity or how a concept works.

NameTypeReqDescription
querystringyes
top_kinteger

No output schema declared.

No examples provided.

set_attribute_batch ~73

Set static attributes on multiple components in one call. Pass a list of updates, each with component_name, attribute_name, and value. Much more efficient than calling set_component_attribute repeatedly. Example: set annual_failure_frequency on 30 generators in one call.

NameTypeReqDescription
updatesarrayyesList of attribute updates to apply.

No output schema declared.

No examples provided.

set_component_attribute ~190

Set a static attribute value for a component, looked up by name. Pass scenario_id to set the value only for a specific scenario (leaving the base case unchanged).

NameTypeReqDescription
attribute_namestringyesName of the attribute (e.g. 'marginal_cost', 'p_nom', 'efficiency')
component_namestringyesName of the component (e.g. 'Gen2', 'Solar_Farm')
replace_timeseriesbooleanRequired true to replace an attribute that currently holds a timeseries with a single value (otherwise refused, so a profile is never lost by accident; to rescale one use modify_timeseries).
scenario_idintegerOptional scenario ID. If provided, sets the value only for this scenario. If omitted, sets the value for the currently-active scenario.
valuenumber|string|booleanyesThe value to set

No output schema declared.

No examples provided.

set_dashboard_config ~325

Configure the analytics dashboard from the app’s built-in chart templates. Sets up which charts appear in the Analytics tab, with auto-generated layout. Call this after building a model to give the user a pre-configured analytics view. REPLACES the whole dashboard — to append one custom chart, use create_chart instead. TO COMPARE SCENARIOS SIDE BY SIDE: give a chart `scenarios` (names or ids, "base" for the base case) and it becomes one pinned chart per scenario; pass group_by "scenario" to arrange the canvas by scenario. A chart with no scenario follows the active-scenario cursor instead, so it re-renders in place when the scenario changes and never shows two at once. Valid template ids — timeseries: dispatch, curtailment, available-capacity, availability, lmp, lcp, link-flows, transformer-flows · summary: generation, system-cost, power-capacity, transmission-capacity, storage-capacity, emissions, curtailment-summary, unmet-load · reliability: unmet-load-timeseries, lol-duration-curve, lolh-distribution, load-duration-curve · map: network.

NameTypeReqDescription
chartsarrayyesCharts to show, in order.
group_bystringArrange the canvas by scenario ('scenario') or as a plain stack ('none', the default). Use 'scenario' whenever charts are pinned.
scenariostring|numberWhich scenario the active cursor points at — a name, an id, or "base". Only affects charts that are not pinned.

No output schema declared.

No examples provided.

set_timeseries_batch ~111

Set several timeseries in one call without shipping every value: each series gives values (full array), OR constant (one number for every period), OR pattern (a short array tiled along the time axis — 24 values on an hourly model is a daily profile, 168 a weekly one; add scale for its peak), OR scale_of (copy another component's series and multiply/offset it). Use load_timeseries_from_file for data that lives in a file.

NameTypeReqDescription
seriesarrayyes

No output schema declared.

No examples provided.

show_folder_in_app ~79

Point the Convexity app's file explorer at a folder (default: the open model's folder) so the user sees the model file. open_in_app does this on its own; use this to show another folder or to refresh the listing.

NameTypeReqDescription
pathstringAbsolute folder or .db path. Default: the open model.

No output schema declared.

No examples provided.

show_in_app ~69

Switch the Convexity app to a view: 'map', 'table', 'analytics' (results), 'jobs', 'text' or 'settings'. To focus specific components on the map or filter the table, use show_on_map / show_in_table.

NameTypeReqDescription
viewstringyes

No output schema declared.

No examples provided.

show_in_table ~156

Switch the user to the table view for a component type — the whole table when only component_type is given, or filtered by component IDs, names (exact) or carrier names (e.g. 'show all oil generators'). Needs the Convexity desktop app running (open_in_app starts it).

NameTypeReqDescription
carrier_namesarrayList of carrier names to filter by (e.g. ['oil', 'solar']). All components of the given type with these carriers will be shown.
component_idsarrayList of component IDs to filter the table to.
component_namesarrayList of component names to filter the table to.
component_typestringyesThe component type to show in the table.

No output schema declared.

No examples provided.

show_on_map ~204

Navigate the user's map view to show specific components. Supports three modes: 1. By component IDs/names: flies to and selects the specific components. 2. By carrier names: hides all other carriers on the map and zooms to fit the matching components. Use this when the user asks to see a category like 'solar farms', 'wind turbines', 'gas plants' etc. 3. Both: filters by carrier AND selects specific components. Use after creating components or when the user asks to see something on the map. Needs the Convexity desktop app running (open_in_app starts it).

NameTypeReqDescription
carrier_namesarrayList of carrier names to filter the map to (e.g. ['solar', 'wind']). The map will hide all other carriers and zoom to fit the matching components.
component_idsarrayList of component IDs to show on the map.
component_namesarrayList of component names to show on the map.

No output schema declared.

No examples provided.

solve_via_desktop_app ~305

Solve the open model through the running Convexity app: on DESKTOP this queues one job per scenario in the app’s Job Queue exactly as the Run button does — free, on this computer, results written into the model file in place, so the results tools read them once desktop_app_jobs reports it completed. ON WEB THERE IS NO LOCAL SOLVER: the tab submits a CLOUD solve instead, which is BILLED to the account (machine_size, default xs) and loads its result back into the tab. Say so before solving on web if the user has not already asked for a cloud run. Do not edit the model while its solve is running. Returns at once; solves take minutes.

NameTypeReqDescription
machine_sizestringWeb app only: the cloud machine the tab submits to (default xs; billed).
max_parallel_jobsintegerHow many of the queued scenarios may solve at once.
scenario_idsarrayScenario ids to solve (null = base case). Omit to solve the active scenario.
solver_namestringSolver engine installed locally; 'highs' is always available, 'mosek' only with a local licence.
timeout_secondsintegerWith wait: give up waiting after this long (default 900).
waitbooleanBlock until the jobs finish (progress is reported), then return their outcome. Default false: return as soon as they are queued.

No output schema declared.

No examples provided.

use_scenario ~56

Set the active scenario for all subsequent tool calls. Pass a scenario id from list_scenarios, or null to work on the base case.

NameTypeReqDescription
scenario_idinteger|nullyesScenario id, or null for the base case.

No output schema declared.

No examples provided.

wait_for_solve ~116

Block until solve jobs finish, reporting progress on the way, then return each one's outcome (failed local jobs include their log tail). Pass job_ids (desktop app queue, from solve_via_desktop_app) and/or job_uuids (cloud, from cloud_solve_submit); with neither it waits for every unfinished job in the app's queue.

NameTypeReqDescription
job_idsarray
job_uuidsarray
timeout_secondsintegerGive up after this long (default 900).

No output schema declared.

No examples provided.

Common questions

What is the io.github.bayesian-energy/convexity-mcp server?

io.github.bayesian-energy/convexity-mcp is listed in the public MCP registry as io.github.bayesian-energy/convexity-mcp. Build, edit, solve and analyse Convexity energy-system models from any MCP client; drives the app. This page covers its npm package (convexity-mcp).

Is the io.github.bayesian-energy/convexity-mcp server safe to use?

io.github.bayesian-energy/convexity-mcp scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. 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 io.github.bayesian-energy/convexity-mcp server expose?

io.github.bayesian-energy/convexity-mcp exposes 39 tools: set_component_attribute, get_model_summary, list_validation_rules, get_validation_rule, create_scenario, and 34 more. Their descriptions and schemas cost roughly 5,524 tokens of context every time the server is loaded.

Is the io.github.bayesian-energy/convexity-mcp server still maintained?

io.github.bayesian-energy/convexity-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.