← Back to search

io.github.cyanheads/bls-labor-mcp-server

cyanheads streamable_http Scanned 24d ago

Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP.

B
87.4 / 100

Versions

No versions found.

PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 7

bls_list_surveys
annotations: verified low

List 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. Optional category filter narrows results to prices, employment, wages, productivity, injuries, or time_use surveys.

input object output object
readOnlyHint true openWorldHint false idempotentHint true
bls_dataframe_drop
annotations: verified low

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. This tool must be explicitly enabled via BLS_DATAFRAME_DROP_ENABLED=true.

input object output object
readOnlyHint false openWorldHint false idempotentHint true destructiveHint true
bls_dataframe_describe
annotations: verified low

List canvas dataframes materialized by bls_get_series, with provenance (source tool, query parameters), TTL, row count, and column schema. Use before writing SQL to confirm column names. Lazy-sweeps expired tables before responding. Requires CANVAS_PROVIDER_TYPE=duckdb.

type string input object output object nullable boolean row_count number created_at string expires_at string source_tool string
readOnlyHint true openWorldHint false idempotentHint true
bls_dataframe_query
annotations: verified low

Run a single-statement SELECT against the canvas dataframes registered by bls_get_series. 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. Requires CANVAS_PROVIDER_TYPE=duckdb.

readOnlyHint true openWorldHint false idempotentHint true
bls_search_series
annotations: verified low

Search 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 plain-language names. Use this before bls_get_series when you have a concept but not a SeriesID. Operates offline — no API quota consumed. Survey filter accepts two-letter codes (CU, CE, LN, LA, PC, JT, OE, EC, PR). Area filter accepts state names, MSA names, or FIPS area codes.

area string input object output object survey string
readOnlyHint true openWorldHint true
bls_get_latest
annotations: verified low

Return the single most recent observation for one or more BLS series. Use for "what is X right now" questions — the current unemployment rate, the latest CPI reading, etc. Each series consumes one API query against the 500/day limit; for the current value of many series, bls_get_series with a 1-year window is more quota-efficient (one query for up to 50 series). Recommended limit: 10 series; maximum: 50.

area string item string input object output object seriesId string
readOnlyHint true openWorldHint true idempotentHint true
bls_get_series
annotations: verified low

Fetch time-series data for 1–50 BLS series by SeriesID in a single API request (one query against the 500/day limit). Supports optional year range (up to 20 years per request) and BLS-computed period-over-period calculations (net change and percent change; a survey returns whichever it supports and silently omits the rest — CPI and PPI return percent change only, the inflation rate). BLS can publish a '-' missing-value sentinel; check observation.available before arithmetic. Set annual_average to add each year's annual-average row, which is that year's mean rather than an additional period. When the total observation count would exceed the inline context budget, results spill to a canvas dataframe and the response includes a dataset.name handle. Call bls_dataframe_describe with that name to inspect the dataframe schema, then use the name in bls_dataframe_query SQL. Use bls_search_series first if you need to resolve a concept to a SeriesID.

readOnlyHint true openWorldHint true

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 24

info
Tool 'bls_list_surveys' annotations are consistent annotation_checker · 80%
info
Tool 'bls_dataframe_drop' annotations are consistent annotation_checker · 80%
info
Tool 'bls_dataframe_describe' annotations are consistent annotation_checker · 80%
info
Tool 'bls_dataframe_query' annotations are consistent annotation_checker · 80%
info
Tool 'bls_search_series' annotations are consistent annotation_checker · 80%
info
Tool 'bls_get_latest' annotations are consistent annotation_checker · 80%
info
Tool 'bls_get_series' annotations are consistent annotation_checker · 80%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: bls_list_surveys manifest_parser · 75%
info
Tool: bls_dataframe_drop manifest_parser · 75%
info
Tool: bls_dataframe_describe manifest_parser · 75%
info
Tool: bls_dataframe_query manifest_parser · 75%
info
Tool: bls_search_series manifest_parser · 75%
info
Tool: bls_get_latest manifest_parser · 75%
info
Tool: bls_get_series manifest_parser · 75%
info
Required env vars (5) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
info
SBOM generated: 13 components sbom_generator · 100%
high
Hardcoded Password found in cyanheads-bls-labor-mcp-server-e76b801/framework-skills/api-utils/references/security.md secret_scanner · 65%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%