Skip to main content
Glama

bls-labor-mcp-server

Search BLS Series

bls_search_series
Read-only

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
areaNoState name, MSA name, or FIPS area code to narrow results to a geographic area. Omit for national series.
limitNoMaximum number of results to return (1–50, default 10).
queryYesNatural language or keyword query (e.g. "unemployment rate", "CPI food", "nonfarm payrolls"). Also accepts a SeriesID directly for exact lookup.
surveyNoTwo-letter LABSTAT survey abbreviation to filter results (e.g. CU for CPI, CE for CES, LN for CPS, LA for LAUS, JT for JOLTS, OE for OEWS). Omit to search all loaded surveys.
seasonal_adjustmentNoWhen true, return only seasonally adjusted series. When false, return only not-seasonally-adjusted. Omit to return both.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe result limit that capped the returned list.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of series returned in this response.
cappedNoTrue when the FTS candidate pool reached the internal cap (~1000). totalCount is then a lower bound, not an exact match count. Narrow the query, add survey/area filters, or use a direct SeriesID to get an exact count.
noticeNoGuidance when no results matched — e.g. how to broaden the query or remove filters. Absent when results are returned.
seriesNoMatching series, ordered by relevance.
truncatedNoTrue when more candidates matched than the limit returned.
areaFilterNoArea filter applied, if any. Absent when no area filter was passed.
totalCountNoTotal candidates scored before the limit was applied. A lower bound when capped is true — the catalog index may contain more matching series.
catalogSizeNoTotal series in the loaded catalog index. Distinguishes an empty-result search from a failed catalog load.
limitAppliedNoResult limit in effect (defaults to 10 when omitted).
surveyFilterNoSurvey filter applied, if any. Absent when no survey filter was passed.
effectiveQueryNoQuery string as the server received and searched on. Confirms interpretation for self-correction.
seasonalFilterNoSeasonal-adjustment filter applied, if any. Absent when not passed.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description does not need to restate safety. It adds behavioral context beyond annotations: 'Operates offline — no API quota consumed,' and describes the output ('decoded components, plain-language names'). This adds useful context without redundancy, though it does not cover edge cases like no matches or error behavior, which is acceptable given the output schema coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences long, front-loads the core purpose, includes usage guidance and key parameter details, and has no filler. Every sentence contributes actionable information. It is tightly written and well-structured for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, 1 required, and an output schema, the description is thorough. It explains what it does, when to use it, parameter specifics (survey codes, area formats), and describes the return content. Since an output schema exists, it doesn't need to detail the return structure. This is complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all 5 parameters with descriptions (100% coverage), so the baseline is 3. The description adds value by expanding on the survey parameter with an explicit list of accepted codes ('CU, CE, LN, LA, PC, JT, OE, EC, PR') that goes beyond the schema's examples, and it clarifies the area filter accepts state, MSA, or FIPS codes. This extra detail helps agents select correct values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's function: 'Search the BLS series catalog by natural language query, survey code, geographic area, or keywords to resolve cryptic SeriesIDs.' It identifies the specific verb (Search), resource (series catalog), and purpose (resolving SeriesIDs), and clearly distinguishes it from the sibling bls_get_series by stating when to use it instead. This is unambiguous and aimed at an agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives direct usage guidance: 'Use this before bls_get_series when you have a concept but not a SeriesID.' This explicitly states the condition and names the alternative tool. It also notes that it operates offline and consumes no API quota, which influences tool selection. No exclusions are needed because the positive condition is precise.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.6/5.0
Disambiguation5/5

Each tool serves a distinct purpose: searching, listing, fetching, describing, and querying. No overlap between tools like bls_get_latest and bls_get_series, which have clear scope differences.

Naming Consistency5/5

All tools follow the bls_verb_noun pattern in snake_case, e.g., bls_search_series, bls_get_latest, bls_dataframe_query. Consistent and predictable.

Tool Count5/5

Six tools cover the essential workflow: discovery (list, search), retrieval (get_latest, get_series), and analysis (describe, query). Neither too few nor too many.

Completeness4/5

Covers the full read lifecycle from discovery to analysis. Minor gaps like a dedicated metadata tool for specific series, but search_series returns sufficient info. Overall well-scoped.