Bls Labor MCP Server
Overview
Description from the maker (original English)
Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP.
What you can do with it
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
- Connection: Computer or cloud
- Transport: stdio, Streamable HTTP
- Category: Databases & datasets
Install
Pick the AI app you use, then copy the settings.
Passed 4/4 checks · What you ask goes through the maker’s server (bls-labor.caseyjhand.com)
First: which AI do you use?
Pick your app and the steps appear below.
Works with Claude · about 2 min
No key, nothing to install · Set it up once on claude.ai or the desktop app, then use it in chat · free accounts can add 1
Open Claude’s Connectors page
CustomizeConnectors
Click “+ Add” → “Add custom connector” and fill in these 2 fields
Copy each value into the field with the same name in Claude, then click Continue
Name · NameBls Labor MCP ServerRemote MCP server URL · Addresshttps://bls-labor.caseyjhand.com/mcpLeave Authentication as Claude detected it, then click Add
Turn it on in a chat
+ConnectorsBls Labor MCP Server
Try it
Use Bls Labor MCP Server and tell me what you can do for me, then show me one thing✓ If Claude says it is using Bls Labor MCP Server or shows a Bls Labor MCP Server tool in the answer, you are connected
Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with ChatGPT on business plans only
ChatGPT Business, Enterprise or Edu on the web, added by a workspace admin or owner · On Free, Plus or Pro: your ChatGPT plan cannot connect MCP yet
Open ChatGPT’s add-MCP page on the web
Plugins+Add custom MCP server
Fill in the name and address
Enter a name, paste the address under Connection, tick the risk warning and click Create as a plugin
Name · NameBls Labor MCP ServerConnection · Addresshttps://bls-labor.caseyjhand.com/mcpPick Bls Labor MCP Server in a chat
Start a new chat and pick Bls Labor MCP Server from your plugins before typing
Try it
Use Bls Labor MCP Server and tell me what you can do for me, then show me one thing✓ If ChatGPT says it is using Bls Labor MCP Server or shows a Bls Labor MCP Server tool in the answer, you are connected
Menu names checked against OpenAI’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with Claude Code · about 2 min
No key, nothing to install
Open Terminal
Mac: press Command+Space and type Terminal · Windows: open PowerShell
Paste this command and press Enter
claude mcp add --transport http bls-labor https://bls-labor.caseyjhand.com/mcpType /mcp in Claude Code
You should see Bls Labor MCP Server listed as connected
Try it
Use Bls Labor MCP Server and tell me what you can do for me, then show me one thing✓ If Claude Code says it is using Bls Labor MCP Server or shows a Bls Labor MCP Server tool in the answer, you are connected
Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with Cursor · about 2 min
No key, nothing to install
Open the AI chat in Cursor in Agent mode
Try it
Use Bls Labor MCP Server and tell me what you can do for me, then show me one thing✓ If Cursor says it is using Bls Labor MCP Server or shows a Bls Labor MCP Server tool in the answer, you are connected
Menu names checked against Cursor’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Works with VS Code · about 2 min
No key, nothing to install
Open the AI chat in VS Code in Agent mode
Try it
Use Bls Labor MCP Server and tell me what you can do for me, then show me one thing✓ If VS Code says it is using Bls Labor MCP Server or shows a Bls Labor MCP Server tool in the answer, you are connected
Menu names checked against VS Code’s help page on Nov 11, 2026 · your screen may differ slightly by app version
Other apps that use MCP, such as Windsurf, Zed or Gemini CLI, each add servers differently. See how in the app list.
Address for apps that connect over the web
https://bls-labor.caseyjhand.com/mcpJSON settings are under “For developers” below
For developers: Terminal commands and JSON settings
Over the web
Claude Code
claude mcp add --transport http bls-labor https://bls-labor.caseyjhand.com/mcpCursor (~/.cursor/mcp.json)
{
"mcpServers": {
"bls-labor": {
"url": "https://bls-labor.caseyjhand.com/mcp"
}
}
}VS Code (mcp.json)
{
"servers": {
"bls-labor": {
"type": "http",
"url": "https://bls-labor.caseyjhand.com/mcp"
}
}
}Installed on your computer
Claude Code
claude mcp add bls-labor --env BLS_API_KEY=your-value --env MCP_LOG_LEVEL=your-value -- npx -y @cyanheads/bls-labor-mcp-serverClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"bls-labor": {
"command": "npx",
"args": [
"-y",
"@cyanheads/bls-labor-mcp-server"
],
"env": {
"BLS_API_KEY": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"bls-labor": {
"command": "npx",
"args": [
"-y",
"@cyanheads/bls-labor-mcp-server"
],
"env": {
"BLS_API_KEY": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"bls-labor": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/bls-labor-mcp-server"
],
"env": {
"BLS_API_KEY": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Values you fill in
BLS_API_KEYenvOptional — works without one (25 req/day). With key: 500 req/day + calculations and annual averages. Register free at bls.gov/developers.MCP_LOG_LEVELenvSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
At a glance
- Downloads per weeki
- 297/wk
- Connection
- Computer or cloud
- Transport
- stdio, streamable-http
- Latest versioni
- 0.7.1
- Categoryi
- Databases & datasets
- Published to registryi
- Nov 1, 2026
- Code last changedi
- Nov 1, 2026
- Maker
- cyanheads
- Packages
npm: @cyanheads/bls-labor-mcp-servernpm: @cyanheads/bls-labor-mcp-server- Registry status
- Active
Which apps can use it
Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.
Connect over the internet in
ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
Run on your computer in
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
Related guides
What it can do
Tool names and descriptions exactly as the server reported them on Nov 6, 2026. The maker wrote them, not us; we show them as plain text.
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 surve
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 se
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 o
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. Suppor
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.
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_maste
Basic checksi
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 11, 2026
- ✓ Pass
Maker matches the repo
The registry name was verified with the GitHub account cyanheads, which owns the repo
- ✓ Pass
Still maintained
Code last changed 10 days ago
- … Not checked yet
Has a licence
We have not read this repo from GitHub yet
- ✓ Pass
Endpoint responds
Responded in 194 ms (HTTP 200)
- – Not applicable
Sign-in with OAuth
No sign-in needed
- ✓ Pass
No hidden instructions in tool descriptions
Read 6 tool descriptions and found no hidden instructions to the AI
Discussion
Ask, share a tip or report that it does not work. Sorted by what people marked helpful.
No posts yet. Be the first to ask or share.
Posts here are written by users, not the PopNx team.
User reviews
No reviews yet
Compared with others in Databases & datasetsi
- More stars than 79% of the other 1162 servers in this category
- Published to the registry more recently than 79% of the other 1162 servers in this category
- Basic checks equal to or better than 100% of the other 1162 servers in this category
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
Common questions
Is Bls Labor MCP Server safe?
It passed 4 of 4 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
What keys or codes does it need?
The registry does not list a required key, though some servers ask you to sign in on first use.
Does it run on my computer or in the cloud?
Either way works: install it on your computer or connect to the cloud version.
Is it still maintained?
The GitHub repo last changed 10 days ago, and the latest version (0.7.1) reached the registry 10 days ago.
Which apps can use it?
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT Business and above.
What can I use instead?
In the same category: Dbx, MCP Toolbox for Databases, MCP Toolbox for Databases
Alternatives
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Toolbox for Databases
MCP Toolbox for Databases enables your agent to connect to your database.
MCP Toolbox for Databases
MCP Toolbox for Databases enables your agent to connect to your database.
README from the maker
Open the README
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
@cyanheads/bls-labor-mcp-server Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP. STDIO or Streamable HTTP. 6 Tools by default · 7 with opt-in drop
Public Hosted Server: https://bls-labor.caseyjhand.com/mcp
Overview
US labor statistics from the Bureau of Labor Statistics: jobs, unemployment, wages, and inflation. Find series in plain language instead of decoding SeriesIDs, pull full history or the latest value, and run SQL over large multi-series results.
Tools
| 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 or bls_dataframe_query — provenance, TTL, row count, column schema. Unavailable when CANVAS_PROVIDER_TYPE=none. |
bls_dataframe_query | Run a SELECT against canvas dataframes registered by bls_get_series or an earlier register_as. Supports JOINs, aggregates, window functions, CTEs. Unavailable when CANVAS_PROVIDER_TYPE=none. |
bls_dataframe_drop | Drop a canvas dataframe by name. Available when BLS_DATAFRAME_DROP_ENABLED=true, unless CANVAS_PROVIDER_TYPE=none; TTL handles cleanup by default. |
Capability reference
bls_list_surveys tool
- Optional
categoryfilters survey programs by subject; returns codes, names, and calculation-support flags (allowsNetChange,allowsPercentChange,hasAnnualAverages). Each row'ssearchCoverage(indexed,composed, ornone) says whetherbls_search_seriesreaches the survey, withseriesIndexedfor indexed ones. - Backed by the BLS surveys API with 30-day process-local caching. Annual-average support is advisory; read
bls_get_series'sannualAverageRowsfor the rows actually returned.
bls_search_series tool
- Search by text or SeriesID, with optional
survey,area, andseasonal_adjustment; blank filters are omitted.areatakes a USPS or 2-digit FIPS state code; a 3-, 4-, 5-, or 7-digit CSA, CPI area, county or CBSA, or state + place code; otherwise a substring of area, title, or SeriesID (all-digit values outside those lengths add a notice).limitdefaults to 10 and requests above 50 clamp to 50 with notice, withoffsetpagination. Exact SeriesIDs rank first, then series matching every query word, with any place the query names in full ahead of the rest; at equal score, current series rank first, then national ones, then the JOLTS aggregate. - Returns decoded SeriesIDs, titles,
frequency, and independently optionalstartYear,endYear, andendPeriodcoverage (for example,1982–2005 Q04). Coverage describes the catalog snapshot, not continuous observations. FollownextOffsetwhiletruncatedis true;capped: truemakestotalCounta lower bound, and paging stops at the FTS candidate pool. - Searches the offline LABSTAT index without using API quota; OE/OEWS is opt-in through
BLS_CATALOG_INCLUDE_OES. Undersurvey: "OE"without those rows, it composes OEWS SeriesIDs from the OE code tables, up to 50 per search; each is markedcomposed: trueand is unconfirmed untilbls_get_seriesreturns data for it. Unindexed surveys remain fetchable by SeriesID.
bls_get_series tool
- Fetch up to 25 SeriesIDs without an API key or 50 with one per call, with a
start_year/end_yearwindow of up to 20 years, optionalcalculations, andannual_average. A start alone resolves the end to the current year capped at start + 19; an end alone is rejected. One batch consumes one API query; calculations depend on survey support (CPI/PPI return percent change only). - Returns local-catalog titles when available and optional BLS
measuremetadata, and observations withavailable; preserves the raw-missing-value sentinel, and keeps valid series in mixed batches. Enrichment reports the applied year window, calculations actually returned, annual-summary rows, and any upstream reductions or advisories. - SeriesIDs are trimmed, uppercased, and deduplicated before the cap;
unprocessedSeriesIdslists the exact ordered remainder without automatic extra batches. Omitted year bounds use BLS's three-calendar-year default, subject to coverage. - Large results spill to
dataset.name. WithCANVAS_PROVIDER_TYPE=none, all fetched observations return inline.
bls_get_latest tool
- Fetch the latest observation for up to 50 SeriesIDs (recommended ≤10). IDs are trimmed, uppercased, and deduplicated before the cap;
unprocessedSeriesIdslists the exact ordered remainder. Each processed ID consumes one API query; usebls_get_seriesfor a more efficient multi-series batch. - Returns successful
results[]beside per-seriesfailed[]entries.latestObservation.availabledistinguishes a published value from BLS's missing-value sentinel.
bls_dataframe_describe tool
- Optional
namedescribes one registered dataframe; omit it to list active dataframes for the tenant. Unavailable whenCANVAS_PROVIDER_TYPE=none. - Returns source tool, query params, row count, TTL (
created_at/expires_at, fixed at table creation), andcolumn_schema; BLS columns are nullable. Registered-query types outside the canvas set (DECIMAL,HUGEINT,SMALLINT, lists) report asVARCHAR. Expired entries are removed when their canvas drop succeeds.
bls_dataframe_query tool
- Run one SELECT against registered tables, with JOINs, aggregates, window functions, or CTEs.
row_limitdefaults to 1000; larger values clamp to 10000, andpreviewclamps to the applied row limit with requested/applied notices. Zero preview remains valid; writes, external-file reads, and system catalogs are denied. - Engine-setting functions (
current_setting,current_schema,current_schemas,in_search_path) andquery_tableare denied. Unqualifiedcurrent_schemakeyword or column references are also denied; qualify a real column with its table alias (for example,t.current_schema).query()accepts one plain SQL string literal, checked recursively up to four levels; computed SQL strings are rejected. Reference staged tables directly for analysis. - Returns rows without consuming BLS API quota. Optional
register_asstages the result with a fresh TTL for chained analysis. Unavailable whenCANVAS_PROVIDER_TYPE=none.
bls_dataframe_drop tool
- Required
nameidentifies the dataframe to drop. Available only withBLS_DATAFRAME_DROP_ENABLED=true, and never withCANVAS_PROVIDER_TYPE=none; TTL handles cleanup by default. - Returns
dropped: falsefor a missing table. A failed drop returns retryablecanvas_drop_failedand leaves the dataframe registered.
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
BLS-specific:
- BLS API v2 client with retry/backoff and daily quota tracking
- Offline series catalog search against LABSTAT flat files, indexed as an on-disk SQLite/FTS5 store — zero API quota for discovery; the OES/OEWS wage survey (~6M series) is opt-in via
BLS_CATALOG_INCLUDE_OES - Typed error contracts for BLS-specific failure modes — quota exhaustion, locked database, calculations not supported
- Period-over-period net/percent-change calculations via BLS's own server-side flag, consistent with BLS's published numbers
- DataCanvas spillover (DuckDB, on by default) for large multi-series result sets — schema discovery and SQL access without re-querying the API
Agent-friendly output:
- Provenance — canvas-spilled results carry a
dataset.namehandle plus row count and expiry;bls_search_seriesechoeseffectiveQuery,catalogSize, and whether the FTS candidate pool wascapped - Graceful partial failure —
bls_get_latestreturns per-itemfailed[](seriesId + error) alongside successfulresults[]instead of failing the whole batch;bls_get_serieskeeps valid series when another SeriesID in the same batch is invalid or empty - Discriminated outputs — every observation carries an
availableboolean for BLS's-missing-value sentinel, so callers branch on a typed field instead of parsing raw values - Actionable notices —
enrichment.noticeexplains empty results, canvas spillover, and unavailable data with concrete next steps (e.g. usingbls_search_seriesto verify a SeriesID)
Getting started
Public Hosted Instance
A public instance is available at https://bls-labor.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": { "bls-labor-mcp-server": { "type": "streamable-http", "url": "https://bls-labor.caseyjhand.com/mcp" } } }
Self-Hosted / Local
Add the following to your MCP client configuration file. A free BLS API key unlocks 500 queries/day — register at bls.gov/developers. The server works without a key at 25 req/day.
{
"mcpServers": { "bls-labor-mcp-server": { "type": "stdio", "command":