ChartKeep MCP
Provides an MCP server that Amazon Alexa+ clients can connect to over Streamable HTTP, enabling voice-style questions about CSV data with grounded facts, column listing, fact queries, and ECharts chart suggestions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ChartKeep MCPwhat's our best-selling region?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ChartKeep MCP
Self-hosted MCP server plus a web page that acts as an Alexa+ client. Ask a spreadsheet a question in the voice you would use on Alexa. The server computes facts from the CSV first, then answers. Charts are ECharts JSON returned by a tool, not guessed in the browser.
Built for the Amazon Developer Hackathon 2026 Alexa+ track. Amazon's Alexa+ MCP Toolkit and Web Simulator are partner-preview only, so this repo uses the path the FAQ allows: a Streamable HTTP MCP server (spec 2025-11-25) and a web client that sends initialize, tools/list, and tools/call.
No Amazon private SDK. No API keys. The sample table never leaves your machine.
Run
Needs Node 20+ and npm. Bun is not required.
npm install
npm run devThen open http://127.0.0.1:5173.
That starts two processes:
Process | URL |
MCP server (Streamable HTTP) |
|
Alexa+ simulator (Vite) |
|
The simulator proxies /mcp to port 8787 so the browser does not have to fight CORS during the demo. Health check: http://127.0.0.1:8787/health.
Related MCP server: mcp-csv-database
What you should see
The page connects and the MCP badge turns live. The wire log shows
initialize(2025-11-25) andtools/list.retail-sales.csvloads throughload_dataset(36 rows of cafe sales by quarter, region, and product).Click a voice chip, or type
Alexa, what's our best-selling region?.The transcript shows the tool call, then a spoken answer. If the question wants a chart, the paper plate on the right renders the ECharts spec from the tool result.


Upload any other CSV the same way. list_columns, query_facts, and suggest_chart keep working on the new table.
Tools
Tool | What it does |
| Load |
| Name, inferred kind, samples, null count |
|
|
| ECharts option JSON plus a one-line insight |
| Voice-style Q&A. Facts first. Numbers that are not in the table or the stats get dropped |
There is also a dataset://current resource and a voice-sales-brief prompt.
The grounded-facts idea comes from plotkeep: compute min/max/change/growth in code, then write the sentence from those numbers.
How this maps to Alexa+
Alexa+ talks to brand add-ons over MCP Streamable HTTP. This repo does the same handshake a real Alexa+ client would:
simulator (this web page)
POST /mcp initialize → MCP-Session-Id
POST /mcp notifications/initialized → 202
POST /mcp tools/list
POST /mcp tools/call name=ask_about_data | suggest_chart | …Responses are JSON (enableJsonResponse: true). The client also parses text/event-stream if a server streams SSE, which the spec requires.
When partner tooling opens up, point Alexa+ at a public HTTPS URL for /mcp. Until then, this page is the client.
Layout
samples/retail-sales.csv bundled cafe sales
server/ Node + TypeScript MCP server
src/index.ts Express + StreamableHTTPServerTransport
src/createServer.ts tool / resource / prompt registration
src/csv.ts quoted CSV, kinds
src/facts.ts series stats + contradiction check
src/query.ts aggregates
src/chart.ts ECharts specs
src/ask.ts voice-style intent → facts → answer
simulator/ Vite + React + TypeScript client
src/mcp/client.ts Streamable HTTP (JSON and SSE)
src/agent/router.ts utterance → tools/call
FRICTION.md hackathon friction log
DEMO.md ≤3 minute video scriptStack: @modelcontextprotocol/sdk 1.32 (spec 2025-11-25), Express 5, Zod 3, Vite 7, React 19, ECharts 5. MIT.
Tests
npm testCovers CSV parse, West as the top region, Butter Croissant as fastest growth, and a pie spec.
Deploy notes
A local run is enough for the hackathon. Judges can clone and run the two commands above.
If you want a public URL later:
Keep the server on
127.0.0.1unless you add auth. The MCP spec warns about DNS rebinding.Tunnel with
cloudflared(or similar) to expose/mcpas HTTPS.Alexa+ production also wants OAuth 2.1 + PKCE. That is out of scope here because the partner console is not available to entrants.
No
.envsecrets are used. Do not add keys to the repo.
License
MIT © 2026 sherotree
This server cannot be deployed
Maintenance
Related MCP Connectors
Ask questions about a CSV in plain English and get answers, charts and cleaned data back.
21Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
- OleanderOAuthdev.oleander
The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceAn MCP server that enables AI assistants to load, query, and analyze local CSV files using tools for filtering, aggregation, and grouping. It provides capabilities to describe schemas, calculate statistics, and sample data directly from CSV files.6-
- AlicenseBqualityCmaintenanceLoads CSV files into a temporary SQLite database and provides comprehensive data analysis tools via MCP, enabling AI assistants to query, analyze, and export data using natural language.14MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI models to interact with local CSV and Parquet data through MCP tools, providing summarization and analysis capabilities.1-
- FlicenseNot gradedqualityDmaintenanceEnables querying CSV or Excel data using natural language through MCP tools, running pandas operations on an uploaded dataset.-