Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP. STDIO or Streamable HTTP.
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- !No standard license detected
git clone https://github.com/cyanheads/bls-labor-mcp-server{
"mcpServers": {
"bls-labor": {
"command": "node",
"args": ["/path/to/bls-labor-mcp-server/dist/index.js"],
"env": {
"BLS_API_KEY": "<bls_api_key>"
}
}
}
}BLS_API_KEYResumen de MCP Servers
<div align="center">
<h1>@cyanheads/bls-labor-mcp-server</h1>
<p><b>Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP. STDIO or Streamable HTTP.</b>
<div>7 Tools</div>
</p>
</div>
<div align="center">
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/bls-labor-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/bls-labor-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
</div>
<div align="center">
[](https://github.com/cyanheads/bls-labor-mcp-server/releases/latest/download/bls-labor-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=bls-labor-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvYmxzLWxhYm9yLW1jcC1zZXJ2ZXIiXSwiZW52Ijp7IkJMU19BUElfS0VZIjoieW91ci1hcGkta2V5In19) [](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22bls-labor-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fbls-labor-mcp-server%22%5D%2C%22env%22%3A%7B%22BLS_API_KEY%22%3A%22your-api-key%22%7D%7D)
[](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
</div>
<div align="center">
**Public Hosted Server:** [https://bls-labor.caseyjhand.com/mcp](https://bls-labor.caseyjhand.com/mcp)
</div>
---
## Tools
Seven tools in two groups — four for BLS data access (survey discovery, SeriesID resolution, history, current values) and three for optional DataCanvas SQL analysis of large result sets:
| Tool | Description |
|:-----|:------------|
| `bls_list_surveys` | List BLS survey programs (CPI, CPS, CES, JOLTS, PPI, OEWS, …) with codes, descriptions, and calculation-support flags. |
| `bls_search_series` | Search the BLS series catalog by natural language, survey, area, or keywords to resolve cryptic SeriesIDs. |
| `bls_get_series` | Fetch time-series data for 1–50 BLS series by SeriesID, with optional year range and period-over-period calculations. |
| `bls_get_latest` | Return the single most recent observation for one or more BLS series. |
| `bls_dataframe_describe` | List canvas dataframes registered by `bls_get_series` — provenance, TTL, row count, column schema. Requires `CANVAS_PROVIDER_TYPE=duckdb`. |
| `bls_dataframe_query` | Run a SELECT against canvas dataframes registered by `bls_get_series`. Supports JOINs, aggregates, window functions, CTEs. Requires `CANVAS_PROVIDER_TYPE=duckdb`. |
| `bls_dataframe_drop` | Drop a canvas dataframe by name. Opt-in via `BLS_DATAFRAME_DROP_ENABLED=true`; TTL handles cleanup by default. Requires `CANVAS_PROVIDER_TYPE=duckdb`. |
### `bls_list_surveys`
List available BLS survey programs and their metadata.
- Covers all major BLS programs: CPS, CES, CPI, PPI, JOLTS, LAUS, OEWS, ECEC, and others
- Optional `category` filter (`prices`, `employment`, `wages`, `productivity`, `injuries`, `time_use`)
- Returns survey codes, descriptions, and calculation-support flags (`allowsNetChange`, `allowsPercentChange`, `hasAnnualAverages`)
- Backed by the live BLS surveys API with monthly caching; does not consume daily API quota
---
### `bls_search_series`
The entry point for most BLS workflows. Resolves human concepts to BLS SeriesIDs.
- BLS identifiers like `LNS14000000` and `CES0000000001` encode survey + area + item + seasonal flag in opaque positional codes — this tool decodes them
- Free-text and keyword search against the full BLS series catalog
- Filter by survey code, geographic area (state name, MSA, or FIPS), and seasonal adjustment flag
- Returns decoded series components (survey, area, item, seasonal flag) alongside the plain-language name
- Operates entirely offline against LABSTAT flat files bundled at startup — no API quota consumed
- Use before `bls_get_series` or `bls_get_latest` when you have a concept but not a SeriesID
---
### `bls_get_series`
Fetch historical time-series data for one or more BLS series.
- Batch fetch up to 50 series per request (counts as one of the 500 daily API queries)
- Optional `start_year` / `end_year` window (BLS caps history at 20 years per request)
- Optional `calculations: true` for BLS-server-side net change and percent change — a survey returns whichever it supports (CPI/PPI return percent change only); check `bls_list_surveys` for per-survey support
- Returns observations with series metadata (title, area, item, seasonality)
- Spills to a DataCanvas dataframe when the observation count exceeds the inline context budget — response includes a `dataset.name` handle for SQL via `bls_dataframe_query`. Requires `CANVAS_PROVIDER_TYPE=duckdb`.
---
### `bls_get_latest`
Get the current value for one or more BLS series.
- Issues one GET per SeriesID (no batch-latest endpoint exists in BLS v2) — each counts as one of the 500 daily API queries
- Recommended limit: ≤10 series per call; accepts up to 50
- For "current value" across many series, `bls_get_series` with a narrow year window is more quota-efficient (one API query regardless of series count)
- Partial success reporting — failed series are returned in a separate `failed[]` array alongside successful results
---
### `bls_dataframe_describe`
Inspect canvas dataframes registered by `bls_get_series`.
- Lists all active dataframes for the current tenant: table name, source tool, query params, row count, column schema, TTL
- Optionally describe a single dataframe by name
- Lazy-sweeps expired entries before responding
- Use before writing SQL to confirm column names
---
### `bls_dataframe_query`
Run SQL against canvas dataframes registered by `bls_get_series`.
- Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected
- Supports JOINs, aggregates, window functions, and CTEs
- Optional `register_as` persists the query result as a new named dataframe with a fresh TTL — useful for chaining analyses without re-consuming BLS API quota
- Inline row cap: 1,000 rows by default (max 10,000); full results live on-canvas when `register_as` is set
- Zero BLS API quota consumed
---
### `bls_dataframe_drop`
Drop a canvas dataframe by name. Idempotent — returns `dropped: false` when nothing matched.
- Use to free canvas resources ahead of the per-table TTL when an analysis is complete
- Must be explicitly enabled via `BLS_DATAFRAME_DROP_ENABLED=true` (TTL handles cleanup by default)
## Features
Built on [`@cyanheads/mcp-ts-core`](https://www.npmjs.com/package/@cyanheads/mcp-ts-core):
- Declarative tool definitions — single file per tool, framework handles registration and validation
- Unified error handling across all tools
- Pluggable auth (`none`, `jwt`, `oauth`)
- Swappable storage backends: `in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`
- Structured logging with optional OpenTelemetry tracing
- STDIO and Streamable HTTP transports
BLS-specific:
- BLS API v2 integration with retry/backoff and daily quota tracking
- Offline series catalog search against LABSTAT flat files — zero API quota for discovery
- Typed error contracts for BLS-specific failure modes: quota exhaustion, locked database, calculations not supported
- Period-over-period calculations via BLS server-side flag (consistent with BLS published numbers)
- DataCanvas spillover (DuckDB) for large multi-series result sets — SQL access without re-querying the API
- Optional local observation mirror — sync LABSTAT bulk data into an embedded SQLite store to serve `bls_get_series` / `bls_get_latest` without the 500/day API cap (opt-in, off by default)
- On-disk SQLite catalog index — the series catalog is parsed into an FTS5 SQLite store, queried on demand (not held in memory) and persisted across restarts; the OES/OEWS wage survey (~6M series) is opt-in via `BLS_CATALOG_INCLUDE_OES`
## Getting started
Add the following to your MCP client configuration file. A free BLS API key unlocks 500 queries/day — register at [bls.gov/developers](https://www.bls.gov/developers/home.htm). The server works without a key at 25 req/day.
```json
{
"mcpServers": {
"bls-labor-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/bls-labor-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"BLS_API_KEY": "your-key-here"
}
}
}
}
```
Or with npx (no Bun required):
```json
{
"mcpServers": {
"bls-labor-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/bls-labor-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"BLS_API_KEY": "your-key-here"
}
}
}
}
```
Or with Docker:
```json
{
"mcpServers": {
"bls-labor-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdiLo que la gente pregunta sobre bls-labor-mcp-server
¿Qué es cyanheads/bls-labor-mcp-server?
+
cyanheads/bls-labor-mcp-server es mcp servers para el ecosistema de Claude AI. Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP. STDIO or Streamable HTTP. Tiene 1 estrellas en GitHub y se actualizó por última vez today.
¿Cómo se instala bls-labor-mcp-server?
+
Puedes instalar bls-labor-mcp-server clonando el repositorio (https://github.com/cyanheads/bls-labor-mcp-server) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar cyanheads/bls-labor-mcp-server?
+
Nuestro agente de seguridad ha analizado cyanheads/bls-labor-mcp-server y le ha asignado un Trust Score de 62/100 (tier: OK). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene cyanheads/bls-labor-mcp-server?
+
cyanheads/bls-labor-mcp-server es mantenido por cyanheads. La última actividad registrada en GitHub es de today, con 2 issues abiertos.
¿Hay alternativas a bls-labor-mcp-server?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega bls-labor-mcp-server en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/cyanheads-bls-labor-mcp-server)<a href="https://claudewave.com/repo/cyanheads-bls-labor-mcp-server"><img src="https://claudewave.com/api/badge/cyanheads-bls-labor-mcp-server" alt="Featured on ClaudeWave: cyanheads/bls-labor-mcp-server" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。