@bicharts/chart-mcp 0.6.94 → 0.6.96

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bicharts/chart-mcp",
3
- "version": "0.6.94",
4
- "description": "MCP (Model Context Protocol) stdio server for BIC AI charts: profile a dataset locally, then generate chart code that has passed the BIC backend's render gates. Works with any MCP-capable client (Claude Code, Claude Desktop, Cursor, Copilot Studio). An account pays to author charts; the code it writes is yours and runs with no licence.",
3
+ "version": "0.6.96",
4
+ "description": "AI Data Components for Power BI, Excel, Fabric Apps and the web, over MCP: bivariate maps, what-if projections and about 90 everyday chart types, with selection and cross-filtering already wired. It profiles your table locally; the code it writes is yours and runs with no license.",
5
5
  "keywords": [
6
6
  "mcp",
7
7
  "modelcontextprotocol",
@@ -47,8 +47,8 @@
47
47
  },
48
48
  "// dependencies": "NONE, deliberately. dist/ bundles every module the server uses, so a runtime dependency installs nothing it needs - it only makes npx fetch that package (and its tree) before the first start. Everything the bundle carries is a devDependency; scripts/verify-package.mjs fails the release if a dependency appears or a shipped file imports anything but Node's built-ins.",
49
49
  "devDependencies": {
50
- "@bicharts/chart-host": "^0.6.93",
51
- "@bicharts/shape-core": "^0.6.93",
50
+ "@bicharts/chart-host": "^0.6.96",
51
+ "@bicharts/shape-core": "^0.6.96",
52
52
  "@modelcontextprotocol/sdk": "^1.0.0",
53
53
  "@types/node": "^20.0.0",
54
54
  "@types/papaparse": "^5.3.14",
@@ -589,11 +589,16 @@ without naming:
589
589
  | how far apart the outcomes of several assumptions land | What-if scenarios |
590
590
  | every place drawn at the same size, because which are high or low matters more than where | World tile-grid cartogram (or US hex-tile cartogram for states) |
591
591
  | actual against a budget, plan or target, with the gap shown for each period or unit | Variance chart (budget vs actual) |
592
- | circling a group of points to see what sets them apart from the rest | Selection explainer - the lasso and the comparison are drawn inside the chart; put the other fields to compare in the same table |
592
+ | circling a group of points to see what sets them apart from the rest | Selection explainer (a preview type) - the lasso and the comparison are drawn inside the chart; put the other fields to compare in the same table; on a page, give it `selects` so a circled group filters the page (step 6) |
593
593
 
594
594
  If the list doesn't offer what you expected, read its notes: it names a type refused on a count
595
595
  when your table is small, and it says when `name_filter` hid description matches.
596
596
 
597
+ The Selection explainer is a preview type: the server offers it only where it's switched on, so it may be missing from the
598
+ list even when the data fits. When `list_eligible_charts` doesn't list it for your data, tell the person it isn't available
599
+ for this data right now, and ask how they want to go on. Don't silently draw a plain scatter in its place, and don't write the
600
+ group statistics (what the circled points share, against the rest) into the app yourself: that comparison is the chart's.
601
+
597
602
  A chart that draws its own rate control needs the history and the goal, not the model's what-if parameter:
598
603
  leave the parameter's table (a `'Price Change'[Price Change]` column, say) out of its query. Grouping by it repeats
599
604
  every period once per parameter value - 12 months by 17 values is 204 rows for 12 points - and the chart's own
@@ -668,7 +673,8 @@ function CountryMap({ table, onPick }) { // table = the live query resu
668
673
  Pass `lasso: { capable: true, enabled: true }` in that chart's `options` (add `rowCap` when the result gives one), and a
669
674
  drag around marks selects the ones inside through the same `onSelect` / `selects` a click uses: the gesture and the
670
675
  selection are the host's, so there is no handler to write. The component `generate_chart` writes passes it already.
671
- Without `capabilities.lasso` the chart has no lasso, and `lasso: { enabled: false }` turns it off.
676
+ Without `capabilities.lasso` the chart has no lasso, and `lasso: { enabled: false }` turns it off. On a page, give that
677
+ chart `selects` so a circled group filters the rest of the page (step 6); without it the lasso only highlights inside it.
672
678
 
673
679
  **Layout: a chart is never clipped or squashed.** Charts sit in cards, and a card is where they get cut off.
674
680
  - Render every chart inside `BicChartPanel`. It sizes the chart from its cell, never from the chart.
@@ -716,6 +722,11 @@ const forecast = useSemanticModelQuery({ connection: "<alias>",
716
722
 
717
723
  What the library does, so the page doesn't:
718
724
  - A click sets the filter. The same click again, or a click on empty canvas, clears it. Ctrl-click adds a key.
725
+ - A lasso is a selection too. On a chart whose result has `capabilities.lasso`, a drag around marks arrives through the same
726
+ `selects` a click uses, as MANY keys (`country.values`). So on a page, a circled group filters the page, just as a click
727
+ does: give the lasso chart `selects` and the other charts `filterBy` or `filterQuery` / `treatAs`. Wire it that way
728
+ whenever a lasso chart shares a page with other charts; the person doesn't have to ask for it. With no `selects` the lasso
729
+ only highlights inside its own chart, and nothing else on the page follows.
719
730
  - `country.clear()` (a button, a chip's ×) clears the filter AND the chart's marks.
720
731
  - New rows keep a selection whose key is still drawn and clear one whose key is gone - reported, never silent.
721
732
  - `country.value`, `country.values`, `country.keys`, `country.row` (the clicked row), `country.active` and