@frontlinesystems/rason-mcp-server 2026.5.3 → 2026.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -33
- package/out/index.cjs +1 -1
- package/package.json +3 -1
- /package/examples/{Optimization → optimization}/Conic/AirlineHubConic.json +0 -0
- /package/examples/{Optimization → optimization}/Conic/AirlineHubConic2.json +0 -0
- /package/examples/{Optimization → optimization}/Conic/AirlineHubConic3.json +0 -0
- /package/examples/{Optimization → optimization}/Conic/AirlineHubConic4.json +0 -0
- /package/examples/{Optimization → optimization}/Conic/AirlineHubConic5.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixCsv.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixCsv4.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel1.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel11.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel2.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixTab.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixTab1.json +0 -0
- /package/examples/{Optimization → optimization}/DataBinding/ProductMixTab2.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/Inventory.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/Matop.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMix.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMix2.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMix3.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMix4.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMixCsv1.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMixCsv2.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/ProductMixSQL11.json +0 -0
- /package/examples/{Optimization → optimization}/Linear/Rowop.json +0 -0
- /package/examples/{Optimization → optimization}/NonLinear/AirlineHub.json +0 -0
- /package/examples/{Optimization → optimization}/NonLinear/AirlineHub2.json +0 -0
- /package/examples/{Optimization → optimization}/NonLinear/AirlineHub3.json +0 -0
- /package/examples/{Optimization → optimization}/NonSmooth/Inventory2.json +0 -0
- /package/examples/{Optimization → optimization}/Quadratic/PortfolioOpt.json +0 -0
- /package/examples/{Optimization → optimization}/Quadratic/PortfolioOpt2.json +0 -0
- /package/examples/{Optimization → optimization}/WithUncertainty/GasCompanyChance.json +0 -0
- /package/examples/{Optimization → optimization}/WithUncertainty/GasCompanyRecourse.json +0 -0
- /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect.json +0 -0
- /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect2.json +0 -0
- /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect3.json +0 -0
- /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect4.json +0 -0
- /package/examples/{Simulation → simulation}/CandyStoreSalesUsingSIP.json +0 -0
- /package/examples/{Simulation → simulation}/CollegeFundGrowth1.json +0 -0
- /package/examples/{Simulation → simulation}/CollegeFundGrowth1SIPModel.json +0 -0
- /package/examples/{Simulation → simulation}/CollegeFundGrowth2.json +0 -0
- /package/examples/{Simulation → simulation}/CollegeFundGrowthSIP.json +0 -0
- /package/examples/{Simulation → simulation}/GBMSimulationModel.json +0 -0
- /package/examples/{Simulation → simulation}/YieldManagement(Sim).json +0 -0
- /package/examples/{Simulation → simulation}/YieldManagement2(Sim).json +0 -0
package/README.md
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
# <img src="https://raw.githubusercontent.com/FrontlineSystems/media/refs/heads/main/mcp-128-128-height-reduced.png" alt="Frontline Systems" height="64"> RASON MCP Server
|
|
4
4
|
|
|
5
|
-
[](https://vsmarketplacebadges.dev/version/FrontlineSystems.rason-mcp.svg?label=RASON%20MCP%20%28VS%20Code%29)](https://marketplace.visualstudio.com/items?itemName=FrontlineSystems.rason-mcp)
|
|
6
|
+
[](https://github.com/FrontlineSystems/rason-mcp-server/releases/latest)
|
|
6
7
|
[](https://www.npmjs.com/package/@frontlinesystems/rason-mcp-server)
|
|
7
8
|
|
|
8
9
|
AI-powered platform for decision intelligence: building, analyzing, and solving optimization, simulation, data science, and decision models with RASON.
|
|
9
10
|
|
|
11
|
+
> **Using VS Code?** Check out [**RASON Desktop**](https://www.solver.com/rason-desktop), Frontline's flagship VS Code extension. It bundles this MCP server; a RASON language server (IntelliSense, validation, signature help); built-in local & cloud solvers; model and examples sidebars; live Power BI / Excel integration with auto-refreshing charts; one-click result export; and more.
|
|
12
|
+
|
|
10
13
|
<sub><i>RASON MCP Server in Claude Desktop — solving a product mix optimization model with results table, constraint utilization chart, and key insights.</i></sub>
|
|
11
14
|
|
|
12
15
|
<sub><i>🔍 Click the screenshot to view full size.</i></sub>
|
|
@@ -97,12 +100,15 @@ This MCP server is more than a REST API wrapper — it's a complete AI infrastru
|
|
|
97
100
|
|
|
98
101
|
## Getting Started
|
|
99
102
|
|
|
100
|
-
|
|
103
|
+
Three ways to install.
|
|
104
|
+
|
|
105
|
+
### 1. Claude Desktop: drop-in extension
|
|
106
|
+
|
|
107
|
+
Grab the latest [MCPB release](https://github.com/FrontlineSystems/rason-mcp-server/releases/latest), then in Claude Desktop open **Settings → Extensions → Advanced Settings → Install Extension** and pick the file. On macOS you can also drag the `.mcpb` onto the app window. The install dialog offers to set a RASON bearer token — only needed to solve models or manage them in the cloud, and can be set later from the extension's settings.
|
|
101
108
|
|
|
102
|
-
|
|
103
|
-
- A RASON bearer token only if you want to solve models, run diagnostics, or manage cloud models
|
|
109
|
+
### 2. npm: any MCP client
|
|
104
110
|
|
|
105
|
-
|
|
111
|
+
For Claude Desktop, Cursor, Windsurf, Claude Code, or any other stdio MCP client, add this entry to your client's MCP config.
|
|
106
112
|
|
|
107
113
|
```json
|
|
108
114
|
{
|
|
@@ -118,9 +124,7 @@ Add the server to your MCP client's configuration. For most clients, use this se
|
|
|
118
124
|
}
|
|
119
125
|
```
|
|
120
126
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
Where to put this depends on your client:
|
|
127
|
+
Omit `env` or `RASON_BEARER_TOKEN` to use the no-account tools only.
|
|
124
128
|
|
|
125
129
|
<details>
|
|
126
130
|
<summary><strong>Claude Desktop</strong></summary>
|
|
@@ -153,8 +157,6 @@ Create or update an MCP configuration file such as `.vscode/mcp.json` in your wo
|
|
|
153
157
|
}
|
|
154
158
|
```
|
|
155
159
|
|
|
156
|
-
Or install the [RASON MCP Server extension](https://marketplace.visualstudio.com/items?itemName=FrontlineSystems.rason-mcp) for automatic setup.
|
|
157
|
-
|
|
158
160
|
See [VS Code MCP setup](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) for details.
|
|
159
161
|
|
|
160
162
|
</details>
|
|
@@ -201,6 +203,15 @@ This server works with any MCP-compatible client over stdio. Configure it with:
|
|
|
201
203
|
|
|
202
204
|
</details>
|
|
203
205
|
|
|
206
|
+
### 3. VS Code: one-click extension
|
|
207
|
+
|
|
208
|
+
Two extensions are available on the Marketplace:
|
|
209
|
+
|
|
210
|
+
- [**RASON MCP Server**](https://marketplace.visualstudio.com/items?itemName=FrontlineSystems.rason-mcp): this MCP server, standalone.
|
|
211
|
+
- [**RASON Desktop**](https://www.solver.com/rason-desktop): Frontline's flagship VS Code extension. Bundles this MCP server; a RASON language server (IntelliSense, validation, signature help); built-in local & cloud solvers; model and examples sidebars; live Power BI / Excel integration with auto-refreshing charts; one-click result export; and more.
|
|
212
|
+
|
|
213
|
+
Set the auth token in either extension via the Command Palette: **RASON: Set Auth Token**.
|
|
214
|
+
|
|
204
215
|
## Works Without a RASON Account
|
|
205
216
|
|
|
206
217
|
Example search, model templates, model analysis, and RASON info tools work without credentials. You can explore the full example library and build models before signing up. A [RASON account](https://rason.com) is needed only for solving models and managing models in the cloud.
|
|
@@ -224,38 +235,38 @@ Set these environment variables in your MCP client config (see [Getting Started]
|
|
|
224
235
|
|
|
225
236
|
### Examples & Templates
|
|
226
237
|
|
|
227
|
-
- **search_examples
|
|
228
|
-
- **get_example
|
|
229
|
-
- **get_model_template
|
|
238
|
+
- **search_examples**: Search ~200 example models by keyword or type (optimization, simulation, datamining/data science, calculation/decision tables, flow/multi-stage pipelines)
|
|
239
|
+
- **get_example**: Retrieve a specific example model with full definition and metadata
|
|
240
|
+
- **get_model_template**: Get a bare JSON scaffold for a model type: blank, optimization, simulation, sim-optimization, data-science, workflow, decision-table, power-bi
|
|
230
241
|
|
|
231
242
|
### Analysis
|
|
232
243
|
|
|
233
|
-
- **describe_model
|
|
234
|
-
- **about_rason
|
|
244
|
+
- **describe_model**: Analyze model structure: type/subtype detection, component inventory, issue identification
|
|
245
|
+
- **about_rason**: RASON capabilities, model types, Frontline Systems ecosystem, and server info
|
|
235
246
|
|
|
236
247
|
### Solving
|
|
237
248
|
|
|
238
|
-
- **solve_model
|
|
239
|
-
- **submit_solve
|
|
240
|
-
- **get_solve_status
|
|
241
|
-
- **get_solve_result
|
|
242
|
-
- **stop_solve
|
|
249
|
+
- **solve_model**: Solve a model synchronously (inline RASON, RASON files, or Excel workbooks)
|
|
250
|
+
- **submit_solve**: Submit a model for asynchronous solving (long-running models)
|
|
251
|
+
- **get_solve_status**: Check solving status and progress
|
|
252
|
+
- **get_solve_result**: Retrieve the result once solving is complete
|
|
253
|
+
- **stop_solve**: Stop a running solve (intermediate results may be available)
|
|
243
254
|
|
|
244
255
|
### Diagnostics
|
|
245
256
|
|
|
246
|
-
- **diagnose_model
|
|
247
|
-
- **submit_diagnose
|
|
257
|
+
- **diagnose_model**: Run diagnostics synchronously (useful for infeasible/unbounded optimization models)
|
|
258
|
+
- **submit_diagnose**: Submit for asynchronous diagnostics
|
|
248
259
|
|
|
249
260
|
### Model Management
|
|
250
261
|
|
|
251
|
-
- **list_models
|
|
252
|
-
- **get_model
|
|
253
|
-
- **post_model
|
|
254
|
-
- **post_model_with_files
|
|
255
|
-
- **put_model
|
|
256
|
-
- **put_model_with_files
|
|
257
|
-
- **set_champion
|
|
258
|
-
- **delete_model
|
|
262
|
+
- **list_models**: List models in your account with optional filters by type and kind
|
|
263
|
+
- **get_model**: Retrieve a model definition (RASON JSON)
|
|
264
|
+
- **post_model**: Create a new model from a RASON JSON definition
|
|
265
|
+
- **post_model_with_files**: Upload a model with file attachments (RASON + data files, or Excel)
|
|
266
|
+
- **put_model**: Update an existing model or create a new version
|
|
267
|
+
- **put_model_with_files**: Update a model with file attachments
|
|
268
|
+
- **set_champion**: Set or unset the champion (default) version of a model
|
|
269
|
+
- **delete_model**: Delete models with flexible filtering by kind, type, and force option
|
|
259
270
|
|
|
260
271
|
</details>
|
|
261
272
|
|
|
@@ -277,6 +288,6 @@ This software is developed and maintained by **Frontline Systems, Inc.** For que
|
|
|
277
288
|
|
|
278
289
|
## Links
|
|
279
290
|
|
|
280
|
-
- [RASON Portal](https://rason.com)
|
|
281
|
-
- [Frontline Systems](https://www.solver.com)
|
|
282
|
-
- [MCP Protocol](https://modelcontextprotocol.io)
|
|
291
|
+
- [RASON Portal](https://rason.com): create a free account, manage models, documentation
|
|
292
|
+
- [Frontline Systems](https://www.solver.com): the company behind RASON and Analytic Solver
|
|
293
|
+
- [MCP Protocol](https://modelcontextprotocol.io): learn about the Model Context Protocol
|
package/out/index.cjs
CHANGED
|
@@ -309,7 +309,7 @@ Data flow:`);for(let a of o)t.push(` ${a}`)}return{lines:t,observations:r}}func
|
|
|
309
309
|
### Structure`),t.push(...a.lines),a.observations.length>0){t.push(`
|
|
310
310
|
### Observations`);for(let x of a.observations)t.push(`- ${x}`)}let s=new Set(["modelName","modelDescription","modelType","modelSettings","comment","variables","constraints","objective","uncertainVariables","uncertainFunctions","formulas","data","datasources","datasets","estimator","transformer","fittedModel","weakLearner","preProcessor","actions","decisionTables","boxFunctions","boxIterators","typeDefs","flowName","workflowName","flowDescription","workflowDescription","engineSettings","indexSets","parameters","evaluations","contexts"]),l=Object.keys(e).filter(x=>{if(s.has(x))return!1;let S=e[x];return!(S&&typeof S=="object"&&!Array.isArray(S)&&"modelName"in S)}),d=[],p=Ke(e.engineSettings);p&&d.push(`engineSettings (${p})`);let f=Ke(e.indexSets);f&&d.push(`indexSets (${f})`);let g=Ke(e.parameters);g&&d.push(`parameters (${g})`);let y=Ke(e.evaluations);y&&d.push(`evaluations (${y})`);let v=Ke(e.contexts);return v&&d.push(`contexts (${v})`),(d.length>0||l.length>0)&&(t.push(`
|
|
311
311
|
### Other sections`),d.length>0&&t.push(d.join(" | ")),l.length>0&&t.push(`Unrecognized: ${l.join(", ")}`)),t.join(`
|
|
312
|
-
`)}function OR(e){e.registerTool("describe_model",{title:"Analyze RASON Model",description:"Analyze and classify a RASON model: reliably detect model type and subtype (optimization \u2014 LP, QP, MIP, stochastic, chance-constrained; simulation; datamining \u2014 classification, regression, clustering; calculation \u2014 decision tables, box functions; multi-stage flow), inventory and classify components (variable types, constraint types, distribution families, ML pipelines, inter-stage data flow), and identify issues (missing result requests, absent validation data, empty output sections). Provides deterministic RASON-specific analysis beyond what raw JSON inspection reveals. Call whenever the user asks about, discusses, or works with a RASON model \u2014 whether open in the editor, referenced as a file, provided inline, or stored on the RASON server.",annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:I.object({model:I.record(I.string(),I.unknown()).optional().describe("The RASON model as a JSON object. Mutually exclusive with rason_model_path and name_or_id."),rason_model_path:I.string().optional().describe("Path to a file containing a RASON model. Mutually exclusive with model and name_or_id."),name_or_id:I.string().optional().describe("Name or ID of an existing model on the RASON account. The model will be fetched and analyzed. Mutually exclusive with model and rason_model_path.")})},async t=>{let{model:r,rason_model_path:i,name_or_id:n}=t,o=[r,i,n].filter(l=>l!==void 0).length;if(o===0)throw new Error("Must provide one of: model, rason_model_path, or name_or_id.");if(o>1)throw new Error("Provide only one of: model, rason_model_path, or name_or_id.");let a;if(r)a=r;else if(i){let l=await sn(i);try{a=JSON.parse(l)}catch(d){throw new Error(`Failed to parse JSON from ${i}: ${d instanceof SyntaxError?d.message:"unknown error"}. The file may contain syntax errors or incomplete JSON. Read the file directly to inspect and fix the content.`)}}else{let d=(await tt("GET",`/model/${encodeURIComponent(n)}`)).content[0].text;try{a=JSON.parse(d)}catch(p){throw new Error(`Failed to parse model response for "${n}": ${p instanceof SyntaxError?p.message:"unknown error"}. Use get_model to retrieve the raw content and inspect it directly.`)}}return{content:[{type:"text",text:tF(a)}]}})}var NR=process.env.RASON_EXAMPLES_DIR||AR.default.resolve(__dirname,"../examples"),Bi=new qm({name:"rason-mcp-server",version:"2026.5.
|
|
312
|
+
`)}function OR(e){e.registerTool("describe_model",{title:"Analyze RASON Model",description:"Analyze and classify a RASON model: reliably detect model type and subtype (optimization \u2014 LP, QP, MIP, stochastic, chance-constrained; simulation; datamining \u2014 classification, regression, clustering; calculation \u2014 decision tables, box functions; multi-stage flow), inventory and classify components (variable types, constraint types, distribution families, ML pipelines, inter-stage data flow), and identify issues (missing result requests, absent validation data, empty output sections). Provides deterministic RASON-specific analysis beyond what raw JSON inspection reveals. Call whenever the user asks about, discusses, or works with a RASON model \u2014 whether open in the editor, referenced as a file, provided inline, or stored on the RASON server.",annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:I.object({model:I.record(I.string(),I.unknown()).optional().describe("The RASON model as a JSON object. Mutually exclusive with rason_model_path and name_or_id."),rason_model_path:I.string().optional().describe("Path to a file containing a RASON model. Mutually exclusive with model and name_or_id."),name_or_id:I.string().optional().describe("Name or ID of an existing model on the RASON account. The model will be fetched and analyzed. Mutually exclusive with model and rason_model_path.")})},async t=>{let{model:r,rason_model_path:i,name_or_id:n}=t,o=[r,i,n].filter(l=>l!==void 0).length;if(o===0)throw new Error("Must provide one of: model, rason_model_path, or name_or_id.");if(o>1)throw new Error("Provide only one of: model, rason_model_path, or name_or_id.");let a;if(r)a=r;else if(i){let l=await sn(i);try{a=JSON.parse(l)}catch(d){throw new Error(`Failed to parse JSON from ${i}: ${d instanceof SyntaxError?d.message:"unknown error"}. The file may contain syntax errors or incomplete JSON. Read the file directly to inspect and fix the content.`)}}else{let d=(await tt("GET",`/model/${encodeURIComponent(n)}`)).content[0].text;try{a=JSON.parse(d)}catch(p){throw new Error(`Failed to parse model response for "${n}": ${p instanceof SyntaxError?p.message:"unknown error"}. Use get_model to retrieve the raw content and inspect it directly.`)}}return{content:[{type:"text",text:tF(a)}]}})}var NR=process.env.RASON_EXAMPLES_DIR||AR.default.resolve(__dirname,"../examples"),Bi=new qm({name:"rason-mcp-server",version:"2026.5.5"},{instructions:`This MCP server connects to Frontline Systems' RASON REST API (endpoint: https://rason.net, web app: https://rason.com). RASON (RESTful Analytic Solver Object Notation) is a JSON-based modeling language created by Frontline Systems, Inc. (https://www.solver.com), the creator of the Excel Solver, for defining and solving analytical models via a REST API.
|
|
313
313
|
|
|
314
314
|
RASON model types:
|
|
315
315
|
- Optimization \u2014 linear, mixed-integer, nonlinear, conic, quadratic, stochastic; powered by Gurobi, XPRESS, MOSEK, KNITRO engines
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontlinesystems/rason-mcp-server",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.5",
|
|
4
4
|
"mcpName": "io.github.FrontlineSystems/rason-mcp-server",
|
|
5
5
|
"description": "Build, solve, and analyze RASON optimization, simulation, data science, and decision models",
|
|
6
6
|
"author": "Frontline Systems (https://www.solver.com)",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"inspector:test": "npx @modelcontextprotocol/inspector node --env-file=.env.test out/index.cjs",
|
|
59
59
|
"inspector:debug": "npx @modelcontextprotocol/inspector node --env-file=.env.local --inspect-brk out/index.cjs",
|
|
60
60
|
"build:readme": "node scripts/build-readme.js",
|
|
61
|
+
"build:mcpb": "node scripts/build-mcpb.js",
|
|
61
62
|
"prepack": "npm run build:readme && npm run compile:prod"
|
|
62
63
|
},
|
|
63
64
|
"dependencies": {
|
|
@@ -68,6 +69,7 @@
|
|
|
68
69
|
"zod": "^4.3.6"
|
|
69
70
|
},
|
|
70
71
|
"devDependencies": {
|
|
72
|
+
"@anthropic-ai/mcpb": "^2.1.2",
|
|
71
73
|
"@types/mime-types": "^3.0.1",
|
|
72
74
|
"@types/node": "^22.10.5",
|
|
73
75
|
"esbuild": "^0.27.4",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|