# BLS OEWS (pypi · bls-oews-mcp)

BLS access readiness and Occupational Employment and Wage Statistics market wages. 8 tools.

- Trust score: 79/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- pypi · `bls-oews-mcp`: 79/100 (this document), [markdown](https://verifymcp.io/servers/com-1102tools-bls-oews-mcp/bls-oews-mcp.md), [page](https://verifymcp.io/servers/com-1102tools-bls-oews-mcp/bls-oews-mcp)

## Channel facts

- Registry: `pypi`
- Package: `bls-oews-mcp`
- Version: `1.0.10`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - 1 of 34 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 7 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 1399 tokens (~174/item across 8 items; 8 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 93/100
  - Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 8 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 9 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the BLS OEWS MCP server?

BLS OEWS runs locally as a PyPI package, launched with uvx bls-oews-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-1102tools-bls-oews-mcp -- uvx bls-oews-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "com-1102tools-bls-oews-mcp": {
      "command": "uvx",
      "args": [
        "bls-oews-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-1102tools-bls-oews-mcp": {
      "command": "uvx",
      "args": [
        "bls-oews-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-1102tools-bls-oews-mcp -- uvx bls-oews-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-1102tools-bls-oews-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "bls-oews-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-1102tools-bls-oews-mcp --command uvx --arg bls-oews-mcp
```

### Hermes

```yaml
mcp_servers:
  com-1102tools-bls-oews-mcp:
    command: "uvx"
    args: ["bls-oews-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-1102tools-bls-oews-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "bls-oews-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-1102tools-bls-oews-mcp -t stdio -c uvx -a bls-oews-mcp
```

### Other

```json
{
  "mcpServers": {
    "com-1102tools-bls-oews-mcp": {
      "command": "uvx",
      "args": [
        "bls-oews-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-19 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-14 (score 76, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-09-13 (score 61, −14)

- [security regression] Malware scan: pass → unverified
- [functional] Package version: 1.0.9 → 1.0.10

### 2026-09-11 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-09 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-07 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (8)

### `get_access_status` (~21 tokens)

Check BLS credential presence without returning or validating its value.

### `get_wage_data` (~561 tokens)

Get wage data for an occupation by SOC code.

This is the primary tool for querying BLS OEWS wage statistics.

occ_code: 6-digit SOC code without dash (e.g., '151252' for Software
Developers, '131082' for Project Management Specialists). See
list_common_soc_codes() for common mappings.

scope + area_code:
\- 'national': no area_code needed (all US)
\- 'state': area_code = 2-digit state FIPS (e.g., '51' for VA, '11' for DC)
\- 'metro': area_code = 5-digit MSA code (e.g., '47900' for DC metro,
  '42660' for Seattle). See list_common_metros() for codes.

industry: 6-digit industry code for national-only breakdowns.
'000000' = all industries (default). Common: '541000' (Professional Services),
'541500' (Computer Systems), '999100' (Federal Government). Industry
breakdowns only work with scope='national'.

datatypes: list of 2-digit codes. Default uses IGCE set:
\- '04' = Annual Mean Wage
\- '13' = Annual Median
\- '11' = Annual 10th Percentile
\- '15' = Annual 90th Percentile
Hourly percentiles: '03' (Mean), '06' (10th), '07' (25th), '08'
(Median), '09' (75th), '10' (90th). Annual percentiles: '11' (10th),
'12' (25th), '13' (Median), '14' (75th), '15' (90th). Other: '01'
(Employment); '16' (Employment per 1,000 Jobs) and '17' (Location
Quotient) exist at state/metro scope only.

CRITICAL: Data year defaults to 2025 (May 2025 estimates). Do NOT pass
2026\. OEWS estimates publish about a year in arrears (May 2025 estimates
released April 2026), so the current calendar year returns nothing. Older
years are withdrawn once superseded: 2024 now returns no data at all.
Call detect_latest_year() if you need to confirm the newest published year.

Special values ('-', '*', '#') mean BLS did not publish the cell; the
attached footnote says why (annual-only occupation, sample too small).

Input parameters:

- `area_code`
- `datatypes`
- `industry`
- `occ_code` (required)
- `scope` (string)
- `year`

### `compare_metros` (~142 tokens)

Compare wages for one occupation across multiple metro areas.

Pass a list of 5-digit MSA codes (e.g., ['47900', '42660', '12580']
for DC, Seattle, Baltimore). Returns the specified wage measure for
each metro. Use list_common_metros() to find codes.

datatype: '04' (Annual Mean, default), '13' (Median), '03' (Hourly Mean).

Max ~12 metros per call (each metro = 1 series, 50 series limit on v2).

Input parameters:

- `datatype`
- `metro_codes` (array, required)
- `occ_code` (required)
- `year`

### `compare_occupations` (~87 tokens)

Compare wages across multiple occupations in one location.

Pass a list of 6-digit SOC codes. Returns the specified wage measure
for each occupation. Use list_common_soc_codes() to find codes.

Max ~12 occupations per call.

Input parameters:

- `area_code`
- `datatype`
- `occ_codes` (array, required)
- `scope` (string)
- `year`

### `igce_wage_benchmark` (~284 tokens)

Get wage benchmarks formatted for IGCE development.

Returns annual and hourly wages at mean, median, 10th, and 90th
percentiles, plus estimated burdened hourly rates using the specified
burden multiplier range.

BLS wages are BASE wages (no fringe, overhead, G&A, or profit).
Multiply by a burden factor to estimate fully-loaded rates:
\- 1.5x-1.7x: lean contractor
\- 1.8x-2.2x: mid-range professional services (default)
\- 2.0x-2.5x: large contractor with clearance overhead
\- 2.5x-3.0x: high-overhead (SCIF, deployed)

The burdened range should roughly align with GSA CALC+ ceiling rates
for comparable labor categories. If CALC+ >> burdened BLS, the role
may require specialized skills or clearance overhead. Document the gap.

Burden multipliers must be positive and burden_low <= burden_high.
Reasonable range: 1.3 (lean) to 4.0 (high-overhead/clearance).

Input parameters:

- `area_code`
- `burden_high` (number)
- `burden_low` (number)
- `occ_code` (required)
- `scope` (string)
- `year`

### `detect_latest_year` (~105 tokens)

Ask the BLS API which OEWS data year is the newest available.

OEWS releases annually around April/May, and BLS serves ONLY the latest
survey year (older years are withdrawn). This probe sends the API's
latest=true flag with no year range, so it reports the true newest year
even if this package's default has fallen multiple years behind.

Call this once at the start of an IGCE build to confirm the default
year still matches reality.

### `list_common_soc_codes` (~81 tokens)

List common SOC code mappings for federal IT and professional services.

Use these codes with get_wage_data() and other tools. SOC codes are
6 digits without a dash (e.g., '151252' not '15-1252').

For the full SOC list: https://www.bls.gov/oes/current/oes_stru.htm

### `list_common_metros` (~79 tokens)

List common metro area MSA codes for wage lookups.

Use these codes with get_wage_data(scope='metro', area_code=...).
Pass the 5-digit MSA code (the tool auto-pads to 7 characters).

For the full MSA list: https://www.bls.gov/oes/current/msa_def.htm

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-1102tools-bls-oews-mcp/bls-oews-mcp#diagnostics

## Score history

- 2026-09-21: 79
- 2026-09-20: 79
- 2026-09-19: 79
- 2026-09-18: 78
- 2026-09-17: 78
- 2026-09-16: 77
- 2026-09-15: 77
- 2026-09-14: 76
- 2026-09-13: 61
- 2026-09-12: 75
- 2026-09-11: 75
- 2026-09-10: 74
- 2026-09-09: 74
- 2026-09-08: 73
- 2026-09-07: 73
- 2026-09-06: 72
- 2026-09-05: 72
- 2026-09-04: 72
- 2026-09-03: 71
- 2026-09-02: 71
- 2026-09-01: 70
- 2026-08-31: 70
- 2026-08-30: 69
- 2026-08-29: 69
- 2026-08-28: 68
- 2026-08-27: 53
- 2026-08-26: 51
- 2026-08-25: 64
- 2026-08-24: 49

## Common questions

### What is the BLS OEWS MCP server?

BLS OEWS is an MCP server listed in the public MCP registry as com.1102tools/bls-oews-mcp. BLS access readiness and Occupational Employment and Wage Statistics market wages. 8 tools. This page covers its PyPI package (bls-oews-mcp).

### Is the BLS OEWS MCP server safe to use?

BLS OEWS scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the BLS OEWS MCP server expose?

BLS OEWS exposes 8 tools: get_access_status, get_wage_data, compare_metros, compare_occupations, igce_wage_benchmark, and 3 more. Their descriptions and schemas cost roughly 1,360 tokens of context every time the server is loaded.

### Is the BLS OEWS MCP server still maintained?

BLS OEWS is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the BLS OEWS MCP server under?

BLS OEWS declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/bls-oews-mcp/
- Socket report: https://socket.dev/pypi/package/bls-oews-mcp
- Repository: https://github.com/1102tools-dev/federal-contracting-mcps
- Website: https://1102tools.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-1102tools-bls-oews-mcp/bls-oews-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-1102tools-bls-oews-mcp/bls-oews-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-1102tools-bls-oews-mcp/bls-oews-mcp
