US workplace-safety standards (29 CFR Chapter XVII, parts 1900–1990) — thin wrapper over the official eCFR API, scoped to OSHA regulations.
Two well-named, read-only tools with solid descriptions and complete input schemas. osha_standard and osha_search both follow verb_noun naming and include detailed, LLM-optimized descriptions (200+ chars each). Input schemas are properly typed with string/number fields and descriptions. However, output schemas are not documented in the visible code, the tool definitions show only inputs. Error handling is present (timeout retry logic, eCFR API error messages) but recovery guidance is minimal. No tool annotations (readOnlyHint, idempotentHint) despite both tools being read-only and idempotent. Parameter descriptions are good but could be more prescriptive about constraints (e.g., limit range for osha_search is stated as '1 - 2' in description but not enforced in schema).
Keyword search across OSHA standards — the US workplace-safety / occupational safety and health regulations in 29 CFR (parts 1900–1990). Answers "what OSHA standards cover X", "OSHA regulation / workplace safety requirement for X", "find the OSHA rule about X". Great for topics: fall protection, hazard communication (HazCom / GHS), lockout tagout (LOTO), respiratory protection, personal protective equipment (PPE), confined space, bloodborne pathogens, machine guarding, scaffolding, excavation, permissible exposure limits, recordkeeping. Returns matching OSHA standards with citation, heading, excerpt, and source URL. Results are filtered to OSHA parts only (1910 general industry, 1926 construction, 1915/1917/1918 maritime, 1928 agriculture, 1904 recordkeeping, etc.) — Title-29 wage/hour parts are excluded. Example: osha_search({ query: "fall protection" }); osha_search({ query: "lockout tagout", limit: 15 }). Keyless.
Get the full text of one OSHA standard (US workplace-safety / occupational safety and health regulation) by its citation. OSHA standards are 29 CFR — this returns the exact regulatory wording currently in force. Answers "what is the OSHA standard for X", "does OSHA require X", "read the text of 1910.132", "the OSHA fall protection rule". Forgiving citation input: "1910.132", "29 CFR 1910.132", "§1910.132", "1926.501", even "1910.132(a)" (paragraph is stripped to the section). Covers 29 CFR 1910 general industry, 1926 construction, 1915/1917/1918 maritime, 1928 agriculture, plus recordkeeping (1904) and PPE / hazard communication / lockout tagout / respiratory protection / confined space / bloodborne pathogens standards. Pass a whole part (e.g. "1910" or "1926") to get that part's section list instead. Example: osha_standard({ citation: "1910.132" }) → PPE general requirements; osha_standard({ citation: "1926.501" }) → construction fall protection. Keyless.
Output schemas not documented. Tool definitions show only inputSchema; return types are inferred from code comments but not formally declared. LLMs cannot plan downstream calls or extract fields without explicit output documentation.
No tool annotations despite both tools being read-only and idempotent. readOnlyHint and idempotentHint are missing, preventing agents from optimizing caching and retry strategies.
osha_search limit parameter description states '1 - 2' but schema has no minimum/maximum constraints. Unbounded numeric parameters invite invalid LLM inputs. Schema should declare minValue and maxValue.
Error messages are generic ('eCFR temporarily unavailable', 'eCFR: 503'). No recovery guidance for LLMs. Should include actionable next steps: 'eCFR API timeout, retry in 5 seconds or try a simpler query.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
No pagination support in osha_search. If a query matches 100+ standards, all are returned, risking context window exhaustion. Should accept offset/limit and return total_count.