OSHA recordkeeping checks, inside ChatGPT or Claude
Four of LogStead’s checks are available to AI assistants through the Model Context Protocol (MCP). Ask your assistant whether you have to keep OSHA records, whether you have to submit to OSHA electronically, what your deadlines are, or what your TRIR is, and it runs the same rules LogStead does. Every result the tools return cites the regulation behind it.
Connect
In ChatGPT, install LogStead from its plugin listing. In any other assistant that supports custom MCP connectors, add this server URL. There is no sign-in and no API key.
https://logstead.app/api/mcp
Tools
29 CFR 1904.1 · 1904.2 · 1904.39
recordkeeping_exemption_check
Whether an establishment has to keep OSHA injury and illness records or is partially exempt: by company size (10 or fewer employees at all times last year) or by industry (OSHA’s partially exempt list, matched by NAICS code). Also lists the duties that apply either way, such as reporting a work-related fatality within 8 hours.
29 CFR 1904.41 · Appendices A and B to Subpart E
ita_filing_check
Whether an establishment must make the routine annual submission of its Form 300A summary, and its Form 300 and 301 case data, to OSHA’s Injury Tracking Application for a year’s records, from that year’s peak headcount and its NAICS code, with that year’s March 2 deadline and whether it has passed. A code it can’t match definitively gets “possibly required”, never an all-clear, and an OSHA notice of an individual data collection applies whatever the answer.
29 CFR 1904.29 · 1904.32 · 1904.33 · 1904.35 · 1904.39 · 1904.41
recordkeeping_deadlines
The deadlines for one year’s records: record a case within 7 calendar days, report a fatality within 8 hours and a hospitalization, amputation or loss of an eye within 24 when the event is one 1904.39 covers, post the 300A from February 1 to April 30, submit by March 2 when required, keep the records five years, and give employees copies of their establishment’s records by the end of the next business day. Each item says which events or requests it covers.
OSHA forms package · BLS SOII 2024
incidence_rates
TRIR and DART rates from your case counts and hours worked, each compared with the Bureau of Labor Statistics 2024 private-industry average for your industry, for context.
All four are read-only: they compute from what you pass in and change nothing. The same rules power the free tools on this site.
Try asking
- We have 14 employees at one warehouse. Do we have to keep an OSHA 300 log?
- Our sawmill had 60 employees at peak last year. Do we have to submit our 300A to OSHA electronically, and by when?
- What are our OSHA recordkeeping deadlines for our 2026 records?
- We had 3 recordable cases last year, 1 with days away from work, and 104,000 hours worked. What are our TRIR and DART rates?
Reference
For directories and platforms reviewing the connector, and for anyone wiring it into their own assistant.
| Tool | Input | Returns | Class |
|---|---|---|---|
| recordkeeping_exemption_check | company_peak_employees: integer, 0 to 1,000,000 · naics_code: optional, 6 digits | must_keep_records, basis, headline, explanation, company_peak_employees, naics_code, partially_exempt_industry, still_required, size_rule, industry_rule, naics_note, scope, sources, disclaimer, learn_more_url | Read |
| ita_filing_check | peak_employees: integer, 0 to 1,000,000 · naics_code: optional, 6 digits · records_year: optional, 2023 to the current year (default: the last full year) | result, headline, explanation, records_year, records_year_complete, form_300a_summary, forms_300_301_case_data, partially_exempt_industry, peak_employees, naics_code, employee_count_rule, routine_only, deadline, submission_deadline (date, covers_records_year, status), year_notes, naics_note, scope, sources, disclaimer, tool_url | Read |
| recordkeeping_deadlines | records_year: optional, 2000 to 2100 (default: the current year) | records_year, today, deadlines (id, obligation, applies_when, when, starts, ends, status, cite), notes, scope, sources, disclaimer, learn_more_url | Read |
| incidence_rates | recordable_cases: integer, 0 to 1,000,000 · dart_cases: optional integer, 0 to 1,000,000 · hours_worked: optional, above 0 · average_employees: optional, only to estimate hours · naics_code: optional, 3 to 6 digits | trir, dart_rate, recordable_cases, dart_cases, hours_worked, hours_estimated, formula, hours_rule, trir_benchmark and dart_benchmark (average, compared_with, level, matched_naics, your_rate_is), benchmark_note, sources, disclaimer, tool_url | Read |
- Classification
- Read, for all four. None writes data, changes an account or acts for the user, so none is a write or a sensitive write. Each declares readOnlyHint true, destructiveHint false, idempotentHint true and openWorldHint false.
- Permissions
- None. There is no sign-in, OAuth scope or API key, so no test account is needed to exercise every tool.
- Side effects
- None. Inputs are used to compute the result and are not stored.
- Results
- Every successful call returns a text summary and structured content that matches the tool’s output schema, with its sources (cite, URL, date read) and the not-legal-advice note. Each result links to the matching page on this site, tagged utm_source=mcp_plugin.
- Status
- Each call is synchronous: the response is the final result, so there is nothing to poll. The server is stateless: it issues no session, and a tools/call works without a prior initialize.
- Errors
- Input that fails a tool’s schema (a negative count, a NAICS code in the wrong format, a year out of range) returns a result marked isError, with a message naming the field. So do the rules a schema can’t express: ita_filing_check refuses a records_year that hasn’t started, and incidence_rates needs hours_worked or average_employees and refuses more DART cases than recordable cases. Unknown arguments are ignored, but a call whose arguments hold more than 32 values in all (array elements and object keys) returns a result marked isError. An unknown tool name returns JSON-RPC error -32602. A request body over 64 KiB is refused with HTTP 413 and JSON-RPC error -32000 before any tool runs.
- Rate limits
- We set no rate limit of our own on this endpoint. Each request is capped in size: a body of at most 64 KiB, and at most 32 argument values per tool call (see Errors).
- Transport
- MCP over Streamable HTTP (JSON-RPC 2.0) at the URL above. Server version 1.1.2.
Your data
The server needs no account and cannot see any LogStead workspace or record. It receives only the inputs a check needs (a headcount, a NAICS code, case counts and hours, or a year), uses them to compute the answer, and does not store them or record them in analytics. Please leave names and other personal details out of your requests. Details are in the Privacy Policy.
Questions: support@logstead.app.
This tool gives general information based on OSHA’s recordkeeping rules (29 CFR Part 1904) to help you understand your obligations. It is not legal advice and does not replace the current regulation or the judgment of a qualified safety professional. Rules can change and edge cases exist — verify results against the current text at osha.gov/recordkeeping and consult a professional before making a compliance decision.