BLS Occupational Employment and Wage Statistics market wages, bundled; no API key. 8 tools.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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). Up to 50 metros per call.
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). Up to 50 metros per call.
| Argument | Type | Description |
|---|---|---|
| year | any | |
| datatype | any | |
| occ_code* | any | |
| metro_codes* | array |
{
"type": "object",
"title": "compare_metrosArguments",
"required": [
"occ_code",
"metro_codes"
],
"properties": {
"year": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year",
"default": null
},
"datatype": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Datatype",
"default": "04"
},
"occ_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Occ Code"
},
"metro_codes": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"title": "Metro Codes"
}
}
}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. Up to 50 occupations per call.
| Argument | Type | Description |
|---|---|---|
| year | any | |
| scope | string | |
| datatype | any | |
| area_code | any | |
| occ_codes* | array |
{
"type": "object",
"title": "compare_occupationsArguments",
"required": [
"occ_codes"
],
"properties": {
"year": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year",
"default": null
},
"scope": {
"enum": [
"national",
"state",
"metro"
],
"type": "string",
"title": "Scope",
"default": "national"
},
"datatype": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Datatype",
"default": "04"
},
"area_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Area Code",
"default": null
},
"occ_codes": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
]
},
"title": "Occ Codes"
}
}
}Report the OEWS data year this server answers from. OEWS releases annually in spring, and this server bundles the current release. Every tool defaults to that year. When BLS publishes a newer release, a new package version bundles it.
No arguments.
{
"type": "object",
"title": "detect_latest_yearArguments",
"properties": {}
}Report which OEWS release this server answers from and where it came from. Returns the bundled data year and release, the BLS source files with their SHA-256 and publication dates, the retrieval date, and row counts. No API key is used or needed.
No arguments.
{
"type": "object",
"title": "get_data_statusArguments",
"properties": {}
}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, Scientific, and Technical Services), '541500' (Computer Systems Design and Related Services), '999100' (Federal Executive Branch (OEWS Designation)). Industry breakdowns only work with scope='national'. Federal IT staff mostly fall under 15-1299 (Computer Occupations, All Other), so 999100 with 15-1252 rests on few employees. 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. '02' (Employment RSE) and '05' (Mean Wage RSE) are relative standard errors in percent, a measure of each estimate's reliability. Data year defaults to the OEWS release bundled with this server (get_data_status reports it). Do NOT pass the current calendar year: OEWS publishes about a year in arrears. Other years are rejected. Special values ('-', '*', '#') mean BLS did not publish the cell; the attached footnote says why (annual-only occupation, sample too small).
| Argument | Type | Description |
|---|---|---|
| year | any |
Get wage benchmarks formatted for IGCE development. Returns annual and hourly wages at the mean and the 10th, 25th, median, 75th, and 90th percentiles (25th/75th are the usual junior/senior anchors), plus estimated burdened hourly rates using the specified burden multiplier range. Hourly figures are BLS's published hourly wages (annual / 2080 only where BLS publishes no hourly wage). Also returns the cell's employment and relative standard errors (reliability) and flags thin estimates. Wages are point-in-time estimates for the OEWS reference month (wage_period in the response), not current rates: escalate them to the period of performance before pricing. 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).
| Argument | Type | Description |
|---|---|---|
| year | any | |
| scope | string | |
| occ_code* | any | |
| area_code | any | |
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
No arguments.
{
"type": "object",
"title": "list_common_metrosArguments",
"properties": {}
}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
No arguments.
{
"type": "object",
"title": "list_common_soc_codesArguments",
"properties": {}
}| scope | string |
| industry | any |
| occ_code* | any |
| area_code | any |
| datatypes | any |
{
"type": "object",
"title": "get_wage_dataArguments",
"required": [
"occ_code"
],
"properties": {
"year": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year",
"default": null
},
"scope": {
"enum": [
"national",
"state",
"metro"
],
"type": "string",
"title": "Scope",
"default": "national"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Industry",
"default": "000000"
},
"occ_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Occ Code"
},
"area_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Area Code",
"default": null
},
"datatypes": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Datatypes",
"default": null
}
}
}| burden_low |
| number |
| burden_high | number |
{
"type": "object",
"title": "igce_wage_benchmarkArguments",
"required": [
"occ_code"
],
"properties": {
"year": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year",
"default": null
},
"scope": {
"enum": [
"national",
"state",
"metro"
],
"type": "string",
"title": "Scope",
"default": "national"
},
"occ_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"title": "Occ Code"
},
"area_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Area Code",
"default": null
},
"burden_low": {
"type": "number",
"title": "Burden Low",
"default": 1.8
},
"burden_high": {
"type": "number",
"title": "Burden High",
"default": 2.2
}
}
}