bls-labor-mcp-server
io.github.cyanheads/bls-labor-mcp-serverVersion 0.8.0Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP.
Status
Responds558 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:48 UTC
- Latency
- 558 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://bls-labor.caseyjhand.com/mcpResponds558 msNo sign-in
Claude Code
claude mcp add --transport http bls-labor-mcp-server https://bls-labor.caseyjhand.com/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: bls-labor-mcp-server
Remote MCP server URL: https://bls-labor.caseyjhand.com/mcpCursor
{
"mcpServers": {
"bls-labor-mcp-server": {
"url": "https://bls-labor.caseyjhand.com/mcp"
}
}
}VS Code
code --add-mcp '{"name":"bls-labor-mcp-server","type":"http","url":"https://bls-labor.caseyjhand.com/mcp"}'Streamable HTTP
npm: @cyanheads/bls-labor-mcp-server 0.8.0Package only
npm (npx)
claude mcp add bls-labor-mcp-server -- npx -y @cyanheads/bls-labor-mcp-server@0.8.0Streamable HTTP
npm: @cyanheads/bls-labor-mcp-server 0.8.0Package only
npm (npx)
claude mcp add bls-labor-mcp-server -- npx -y @cyanheads/bls-labor-mcp-server@0.8.0Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
6 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
bls_dataframe_describeList canvas dataframes materialized by bls_get_series or by bls_dataframe_query register_as, with provenance (source tool, query parameters), TTL, row count, and column schema. Use before writing SQL to confirm column names and types. Lazy-sweeps expired tables before responding. | Not declared | Yes | Yes | No |
bls_dataframe_queryRun a single-statement SELECT against the canvas dataframes registered by bls_get_series or by an earlier register_as. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected. System catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied at the bridge layer — use bls_dataframe_describe to list available dataframes. Supports JOINs, aggregates, window functions, and CTEs. Optional register_as persists the result as a new dataframe with a fresh TTL for chained analysis. Canvas SQL operations consume zero BLS API quota. | Not declared | Yes | Yes | No |
bls_get_latestReturn the single most recent observation for BLS series. SeriesIDs are trimmed, uppercased, and deduplicated in first-occurrence order. Processes the first 50 unique IDs and returns the exact remainder as unprocessedSeriesIds for a separate request. Each processed series costs one API query; bls_get_series with a 1-year window uses one query for a batch. Recommended limit: 10 series. | Not declared | Yes | Yes | Yes |
bls_get_seriesFetch BLS time-series data in a single API request (one query). SeriesIDs are trimmed, uppercased, and deduplicated in first-occurrence order. Processes up to 25 unique IDs without a key or 50 with one; unprocessedSeriesIds names the exact remainder for a separate request. Supports optional year range (up to 20 years; BLS may reduce it) and BLS-computed net/percent changes when available. BLS can publish a '-' missing-value sentinel; check observation.available before arithmetic. Set annual_average to add BLS-computed annual summary rows, which are not additional periods or universally arithmetic means. Large results spill to a dataframe when canvas is configured; otherwise all observations return inline. Use dataset.name in bls_dataframe_describe, then bls_dataframe_query SQL. Use bls_search_series to resolve concepts to SeriesIDs. | Not declared | Yes | Yes | Yes |
bls_list_surveysList BLS survey programs with their abbreviation codes, full names, and metadata about calculation support and annual averages. Use to discover which survey covers a topic before calling bls_search_series; each row's searchCoverage says whether bls_search_series reaches the survey through its offline index, composes its SeriesIDs from code tables, or cannot search it, in which case its series are fetched by SeriesID with bls_get_series. Optional category filter narrows results to prices, employment, wages, productivity, injuries, or time_use surveys. | Not declared | Yes | Yes | Yes |
bls_search_seriesSearch the BLS series catalog by natural language query, survey code, geographic area, or keywords to resolve cryptic SeriesIDs. Returns matching series with decoded components (survey, area, item, seasonal flag, and publication frequency for surveys that publish one series at several frequencies) and plain-language names, ranked by relevance and paged with limit and offset. Use this before bls_get_series when you have a concept but not a SeriesID. Operates offline against an index of the major surveys — no API quota consumed. Survey filter accepts the two-letter code of an indexed survey (CU, AP, CE, LN, LA, PC, WP, JT, EC, PR, MP, CW, CM, CI, SM, LE, EI, SU, IP, BD, LU, EE; OE is indexed only when the server sets BLS_CATALOG_INCLUDE_OES=true, and otherwise composes OEWS SeriesIDs from the OE code tables, marked composed and unconfirmed); series in other surveys are fetched by SeriesID with bls_get_series. Area filter accepts place names, USPS state codes, and FIPS, CBSA, and CPI area codes. | Not declared | Yes | Not declared | No |
Details
- Registry status
- Active
- Published
- Nov 15, 2026
- Updated
- Nov 15, 2026
- Website
- Not given
- Categories (suggested)
- Data and analyticsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared