@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.
Files changed (47) hide show
  1. package/README.md +44 -33
  2. package/out/index.cjs +1 -1
  3. package/package.json +3 -1
  4. /package/examples/{Optimization → optimization}/Conic/AirlineHubConic.json +0 -0
  5. /package/examples/{Optimization → optimization}/Conic/AirlineHubConic2.json +0 -0
  6. /package/examples/{Optimization → optimization}/Conic/AirlineHubConic3.json +0 -0
  7. /package/examples/{Optimization → optimization}/Conic/AirlineHubConic4.json +0 -0
  8. /package/examples/{Optimization → optimization}/Conic/AirlineHubConic5.json +0 -0
  9. /package/examples/{Optimization → optimization}/DataBinding/ProductMixCsv.json +0 -0
  10. /package/examples/{Optimization → optimization}/DataBinding/ProductMixCsv4.json +0 -0
  11. /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel.json +0 -0
  12. /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel1.json +0 -0
  13. /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel11.json +0 -0
  14. /package/examples/{Optimization → optimization}/DataBinding/ProductMixExcel2.json +0 -0
  15. /package/examples/{Optimization → optimization}/DataBinding/ProductMixTab.json +0 -0
  16. /package/examples/{Optimization → optimization}/DataBinding/ProductMixTab1.json +0 -0
  17. /package/examples/{Optimization → optimization}/DataBinding/ProductMixTab2.json +0 -0
  18. /package/examples/{Optimization → optimization}/Linear/Inventory.json +0 -0
  19. /package/examples/{Optimization → optimization}/Linear/Matop.json +0 -0
  20. /package/examples/{Optimization → optimization}/Linear/ProductMix.json +0 -0
  21. /package/examples/{Optimization → optimization}/Linear/ProductMix2.json +0 -0
  22. /package/examples/{Optimization → optimization}/Linear/ProductMix3.json +0 -0
  23. /package/examples/{Optimization → optimization}/Linear/ProductMix4.json +0 -0
  24. /package/examples/{Optimization → optimization}/Linear/ProductMixCsv1.json +0 -0
  25. /package/examples/{Optimization → optimization}/Linear/ProductMixCsv2.json +0 -0
  26. /package/examples/{Optimization → optimization}/Linear/ProductMixSQL11.json +0 -0
  27. /package/examples/{Optimization → optimization}/Linear/Rowop.json +0 -0
  28. /package/examples/{Optimization → optimization}/NonLinear/AirlineHub.json +0 -0
  29. /package/examples/{Optimization → optimization}/NonLinear/AirlineHub2.json +0 -0
  30. /package/examples/{Optimization → optimization}/NonLinear/AirlineHub3.json +0 -0
  31. /package/examples/{Optimization → optimization}/NonSmooth/Inventory2.json +0 -0
  32. /package/examples/{Optimization → optimization}/Quadratic/PortfolioOpt.json +0 -0
  33. /package/examples/{Optimization → optimization}/Quadratic/PortfolioOpt2.json +0 -0
  34. /package/examples/{Optimization → optimization}/WithUncertainty/GasCompanyChance.json +0 -0
  35. /package/examples/{Optimization → optimization}/WithUncertainty/GasCompanyRecourse.json +0 -0
  36. /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect.json +0 -0
  37. /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect2.json +0 -0
  38. /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect3.json +0 -0
  39. /package/examples/{Optimization → optimization}/WithUncertainty/ProjectSelect4.json +0 -0
  40. /package/examples/{Simulation → simulation}/CandyStoreSalesUsingSIP.json +0 -0
  41. /package/examples/{Simulation → simulation}/CollegeFundGrowth1.json +0 -0
  42. /package/examples/{Simulation → simulation}/CollegeFundGrowth1SIPModel.json +0 -0
  43. /package/examples/{Simulation → simulation}/CollegeFundGrowth2.json +0 -0
  44. /package/examples/{Simulation → simulation}/CollegeFundGrowthSIP.json +0 -0
  45. /package/examples/{Simulation → simulation}/GBMSimulationModel.json +0 -0
  46. /package/examples/{Simulation → simulation}/YieldManagement(Sim).json +0 -0
  47. /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
- [![RASON MCP](https://img.shields.io/badge/marketplace-v2026.5.1-blue?logo=visualstudiocode&label=RASON%20MCP)](https://marketplace.visualstudio.com/items?itemName=FrontlineSystems.rason-mcp)
5
+ [![RASON MCP (VS Code)](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
+ [![RASON MCP (MCPB)](https://img.shields.io/github/v/release/FrontlineSystems/rason-mcp-server?label=RASON%20MCP%20%28MCPB%29)](https://github.com/FrontlineSystems/rason-mcp-server/releases/latest)
6
7
  [![RASON MCP (npm)](https://img.shields.io/npm/v/@frontlinesystems/rason-mcp-server?label=RASON%20MCP%20%28npm%29)](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
- Prerequisites:
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
- - Node.js 18 or later
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
- Add the server to your MCP client's configuration. For most clients, use this server entry under the client's MCP server map:
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
- You can omit `env` or `RASON_BEARER_TOKEN` to use the no-account tools only.
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** Search ~200 example models by keyword or type (optimization, simulation, datamining/data science, calculation/decision tables, flow/multi-stage pipelines)
228
- - **get_example** Retrieve a specific example model with full definition and metadata
229
- - **get_model_template** Get a bare JSON scaffold for a model type: blank, optimization, simulation, sim-optimization, data-science, workflow, decision-table, power-bi
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** Analyze model structure: type/subtype detection, component inventory, issue identification
234
- - **about_rason** RASON capabilities, model types, Frontline Systems ecosystem, and server info
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** Solve a model synchronously (inline RASON, RASON files, or Excel workbooks)
239
- - **submit_solve** Submit a model for asynchronous solving (long-running models)
240
- - **get_solve_status** Check solving status and progress
241
- - **get_solve_result** Retrieve the result once solving is complete
242
- - **stop_solve** Stop a running solve (intermediate results may be available)
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** Run diagnostics synchronously (useful for infeasible/unbounded optimization models)
247
- - **submit_diagnose** Submit for asynchronous diagnostics
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** List models in your account with optional filters by type and kind
252
- - **get_model** Retrieve a model definition (RASON JSON)
253
- - **post_model** Create a new model from a RASON JSON definition
254
- - **post_model_with_files** Upload a model with file attachments (RASON + data files, or Excel)
255
- - **put_model** Update an existing model or create a new version
256
- - **put_model_with_files** Update a model with file attachments
257
- - **set_champion** Set or unset the champion (default) version of a model
258
- - **delete_model** Delete models with flexible filtering by kind, type, and force option
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) Create a free account, manage models, documentation
281
- - [Frontline Systems](https://www.solver.com) The company behind RASON and Analytic Solver
282
- - [MCP Protocol](https://modelcontextprotocol.io) Learn about the Model Context Protocol
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.3"},{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.
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",
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",