DEV Community

Mehdi Kabbaj
Mehdi Kabbaj

Posted on

We shipped an open dataset as an MCP server and a Rust crate — here's the playbook

We recently published an open dataset — US search demand for 1,008 spreadsheet
templates

(CC BY 4.0, Zenodo DOI 10.5281/zenodo.21416251).
A dataset sitting in a repository is only half useful, so this week we shipped it in two
forms developers can actually consume: an MCP server and a Rust crate. Here's what that
looked like, and the small decisions that mattered.

1. The MCP server: tabletemplates-mcp

MCP (Model Context Protocol) is the emerging standard
for giving AI assistants tools. Ours exposes four read-only tools over the catalog:

  • search_templates — substring search over the 1,008 keywords, sorted by US volume
  • list_template_categories — the 16 categories with aggregated demand
  • top_template_demand — highest-demand keywords, optionally per category
  • find_free_template — the 146 keywords that have a free, no-signup implementation
{
  "mcpServers": {
    "tabletemplates": { "command": "npx", "args": ["-y", "tabletemplates-mcp"] }
  }
}
Enter fullscreen mode Exit fullscreen mode

Two design choices worth stealing:

Every tool response embeds source, reference_url and dataset_doi. When an
assistant answers from your data, you want the citation to travel with the payload —
otherwise the provenance dies at the first hop.

No network calls. The catalog is 1,008 rows; we embed it as JSON in the package.
The server works offline, cold-starts instantly, and there is no API to keep alive.

Code: github.com/tresor4k/tabletemplates-mcp

2. The Rust crate: us-excel-template-data

Same philosophy, different ecosystem:
us-excel-template-data embeds the
CSV via include_str! and parses it with a ~40-line internal parser. Zero dependencies.

use us_excel_template_data::catalog;

let top = catalog::top(5);
let hits = catalog::search("invoice");
let cats = catalog::categories(); // 16, sorted by combined volume
Enter fullscreen mode Exit fullscreen mode

Why a data crate at all? Because data crates are underrated. Every analyst who wants
this data in a pipeline gets a typed API and a version number instead of a URL and a
prayer. The docs on docs.rs render the full
provenance chain (method, DOIs, category definitions) next to the API.

3. What the data says (short version)

  • Project management is the largest category (130 keywords, ~32k monthly searches) — see the project management templates index.
  • Bookkeeping & accounting has the highest demand density: 45 keywords but ~24k searches — led by excel accounting software at 8,250/month (bookkeeping & accounting templates).
  • People overwhelmingly search for artifacts, not features: "template", "tracker", "spreadsheet" — they want the file, filled in, ready to open.

Takeaway

If you publish open data, ship it where developers already are: a package registry and
a tools protocol. The marginal cost after cleaning the dataset was one afternoon; the
result is that both humans and AI assistants can now query the catalog natively.

Dataset: CC BY 4.0 — TableTemplates Data & Research Team.
Also archived on Harvard Dataverse.

Top comments (0)