Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/bonnard-data/mcp-charts/claude-mdgit clone --depth 1 https://github.com/bonnard-data/mcp-chartsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/bonnard-data/mcp-charts/claude-md)<a href="https://agentmods.dev/instructions/bonnard-data/mcp-charts/claude-md"><img src="https://agentmods.dev/badge/instructions/bonnard-data/mcp-charts/claude-md.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.01164 | $0.01164 |
| Opus 5 | $0.00582 | $0.00582 |
| Sonnet 5 | $0.00233 | $0.00233 |
| Haiku 4.5 | $0.00116 | $0.00116 |
Grade A, and why
mcp-charts CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 64 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CLAUDE.md — bonnard-mcp-charts
OSS (MIT) horizontal MCP charting/dashboards library. A dev returns a ChartSpec/DashboardSpec
from an MCP tool; the embedded widget renders it with ECharts inside the host (Claude Desktop /
ChatGPT / MCP Inspector). Its own git repo (bonnard-data/mcp-charts), nested inside the outer
data-mcp git and a sibling of mcp-platform — they are separate gits; Agent isolation:"worktree"
can grab the wrong copy, so make a MANUAL worktree of THIS repo if isolating.
Layout
packages/core(@bonnard/mcp-charts, tsup) — the render compiler (resolve()), types, the DX helpers (chart/chartCell/dashboardResult/addViews), and the embedded widget HTML.packages/widget(@bonnard/mcp-charts-widget, vite) — the in-iframe renderer. Builds to ONE inlineddist/index.html, embedded into core viapackages/core/scripts/embed-widget.mjs->packages/core/src/generated/widget-html.ts. Edit widget ->pnpm buildre-embeds it into core.examples/{dashboard,quickstart}— runnable MCP servers (stateless Streamable HTTP at/mcp).packages/create-mcp-charts— thenpm create @bonnard/mcp-chartsscaffold generator (private).- Docs:
docs/DEV-HARNESS.md.
Build / test
pnpm build— widget (single-file) then core (embeds widget).pnpm typecheck,pnpm test(199 core + 59 widget),pnpm lint,pnpm check(format + lint + typecheck).
Dev loop (pick by what you're editing)
- Widget renderer / core inference ->
pnpm dev:harness— HMR preview: the real widget in an iframe, fed specs from coreresolve()(source), no build/embed/restart. (docs/DEV-HARNESS.md) - Driving the MCP tools ->
pnpm dev:inspect— MCP Inspector against the example server (port 3011). - Before a release ->
pnpm uat— render-pipeline gate: renders every view + all fixtures through SSR, fails on blank charts. Port 3021. - Fresh consumer project ->
npm create @bonnard/mcp-charts my-server(local:node packages/create-mcp-charts/bin/index.mjs <dir>).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 64 lines · 1,164 tokens per session scan A 69d0fb13818a
mcp-charts CLAUDE.md is an instructions file published in the GitHub repository bonnard-data/mcp-charts (9 stars, last pushed 20d ago), licensed MIT. It adds 1,164 tokens to every session, about $0.0058 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
bklit-ui AGENTS.md
Instructions for bklit/bklit-ui, covering agent guide (bklit-ui contributors), building or editing a chart, shipping a chart to production and other contributor skills.
nice-figures AGENTS.md
Instructions for Mapika/nice-figures, covering nice-figures — instructions for ai agents, get the style helper, or copy the single file (matplotlib + numpy only), workflow and hard rules of the register.
unovis AGENTS.md
AGENTS.md instructions for f5/unovis, a project described as: Modular data visualization framework for React, Angular, Svelte, Vue, and vanilla TypeScript or JavaScript.
unovis CLAUDE.md
Claude Code instructions for f5/unovis: The full AI contributor guide lives in ai/AGENTS.md and is shared by Claude, Codex, and Cursor. It is imported below; the skills in ai/skills/ are available as /commit, /open-pr, /add-component, and /add-gallery-example.
openrouter-mcp-multimodal AGENTS.md
AGENTS.md instructions for stabgan/openrouter-mcp-multimodal, covering agent instructions, before you ship, releasing (read this before publishing), short version and version files (must all match package.json).
llm-context.py CLAUDE.md
Instructions for cyberchitta/llm-context.py, covering claude.md, working notes (gitignored) and draining the field notes.