Submit

BLS OEWS MCP

@1102tools

MCP server for the BLS Occupational Employment and Wage Statistics API: ~830 occupations across 530+ metro areas with employment counts, mean/median wages, and full percentile distributions at national, state, and metro levels. 7 tools.
Overview

BLS OEWS MCP

A Model Context Protocol server that wraps the BLS Occupational Employment and Wage Statistics API as deterministic tool calls. Built for IGCE developers, contract price analysts, HR compensation teams, federal labor cost benchmarkers, and anyone who needs market wage data tied to SOC codes and geography.

7 tools covering ~830 occupations across 530+ metro areas. Hardened across multiple live audit rounds. MIT licensed. Optional BLS API key (works without at reduced rate limits).

What it does

Occupation Lookups

  • Search occupations by keyword or SOC code
  • List common federal-contracting SOC codes (15-1252 Software Developers, 15-1212 Information Security Analysts, 11-3021 Computer and Information Systems Managers, etc.)
  • Match labor categories to SOC codes for IGCE staffing alignment

Wage Data

  • Retrieve mean, median, and full percentile distributions (10th, 25th, 50th, 75th, 90th)
  • Filter by SOC code, geographic level (national, state, metro), and ownership type
  • Returns employment counts per occupation per geography

Geographic Coverage

  • 530+ metro areas (Metropolitan Statistical Areas and Metropolitan Divisions)
  • All 50 states plus DC
  • National-level rollups
  • Compare wages across multiple metros for the same occupation

Cross-Geographic Comparison

  • compare_metros: pull wage data for a single SOC across N metros at once
  • compare_occupations: pull wage data for N SOCs in a single metro
  • Side-by-side wage spread analysis across labor markets

IGCE Wage Benchmarks

  • Direct IGCE benchmark tool returning a wage range and median for a labor category in a specific market
  • Built-in BLS data vintage tracking so consumers can apply an aging factor to bring wages forward to contract start date

Data Vintage

  • detect_latest_year: returns the most current year of BLS OEWS data available
  • BLS publishes annually, typically with a ~12-18 month lag
  • IGCE Builder skills automatically apply ECI-based wage aging on top of BLS to compensate for the lag

Use cases

  • Build IGCEs grounded in real BLS market wage data instead of made-up numbers
  • Cross-reference contractor proposed labor rates against market wage distributions
  • Federal labor cost analyses for budget submissions and program reviews
  • Geographic differential analysis (DC vs San Diego vs Huntsville for the same labor mix)
  • Justify wage increases or labor category placements with documented market data
  • Pre-solicitation pricing strategy for FFP, T&M, LH, and cost-reimbursement contracts

Compatibility

  • Claude Desktop (one-click .mcpb install or Copy JSON)
  • Codex (ChatGPT) via TOML config or codex mcp add
  • Gemini CLI via ~/.gemini/settings.json
  • Copilot via .vscode/mcp.json in VS Code
  • Claude Code, Cursor, Cline, Zed, Continue, and any other MCP-compatible client

Install

Optional free BLS API key from https://data.bls.gov/registrationEngine/ (500 queries/day with key, fewer without). The MCP works without a key for low-volume use.

{
  "mcpServers": {
    "bls-oews": {
      "command": "uvx",
      "args": ["--refresh-package", "bls-oews-mcp", "--from", "bls-oews-mcp", "bls-oews-mcp"],
      "env": { "BLS_API_KEY": "your-key-here" }
    }
  }
}

TOML config (Codex):

[mcp_servers.bls-oews]
command = "uvx"
args = ["--refresh-package", "bls-oews-mcp", "--from", "bls-oews-mcp", "bls-oews-mcp"]

[mcp_servers.bls-oews.env]
BLS_API_KEY = "your-key-here"

PyPI: pip install bls-oews-mcp or uvx bls-oews-mcp

Example prompts

  • "What is the median wage for Software Developers (SOC 15-1252) in the Washington DC metro?"
  • "Compare Senior Systems Engineer wages across San Diego, DC, and Huntsville. Give me 25th, 50th, and 75th percentiles."
  • "Pull BLS wage data for the 12 labor categories I'm staffing for this IT modernization IGCE in DC."
  • "Show me national vs DC metro wage spread for Cybersecurity Analysts (SOC 15-1212)."
  • "What occupations does BLS publish for the San Antonio MSA?"
  • "Build an IGCE wage benchmark for SOC 15-1252 in the Boston-Cambridge-Newton MSA at the 75th percentile."
  • "What's the most recent year of BLS OEWS data available?"

Hardening

Live-audited against the production BLS OEWS endpoint across multiple rounds. Handles BLS API rate limiting, MSA code variants, suppressed data flags, and footnote conventions. Pydantic models use extra="forbid" to surface schema drift. Tested behavior with and without the optional BLS API key. Built-in vintage detection prevents stale-data surprises.

Source

Server Config

{
  "mcpServers": {
    "bls-oews": {
      "command": "uvx",
      "args": [
        "--refresh-package",
        "bls-oews-mcp",
        "--from",
        "bls-oews-mcp",
        "bls-oews-mcp"
      ],
      "env": {
        "BLS_API_KEY": "your-key-here"
      }
    }
  }
}
© 2025 MCP.so. All rights reserved.

Build with ShipAny.