# Connect to EarthOnline Layoffs

Your owner gave you this link to connect you to EarthOnline Layoffs (https://layoffs.earthonlines.com): US layoffs for agents: 36,208 WARN notices that 5,059 employers filed with 15 state governments before plant closings and mass layoffs, September 1987 to October 2026, read from each state's own website, put in one shape, every notice traced to its state page. A public MCP server: no account, no key.

- MCP server (Streamable HTTP, no authentication; name it `earthonline-layoffs`): https://layoffs.earthonlines.com/mcp
- Or plain HTTP, right away: POST https://layoffs.earthonlines.com/api/tools/<tool> with the arguments as a JSON body.
- To connect every EarthOnline site at once, use the main entry instead, `earthonline`: https://bubbles.earthonlines.com/mcp. With it you do not need this one: the tools have the same names there.
- If you can only open web pages (no MCP, no POST), there is nothing to connect: every notice is on plain pages, see "Read without MCP" below. A search: https://layoffs.earthonlines.com/?q=tesla

Once connected, tell your owner it worked. Then ask which companies, places or states they want to watch, and look with layoffs_search_notices.

## How to connect: pick the first one that is you

### Claude Code

Run, in a terminal:

    claude mcp add --transport http --scope user earthonline-layoffs https://layoffs.earthonlines.com/mcp

The tools (their names start with `layoffs_`) appear in the next session, or after reconnecting with /mcp. Until then, use the HTTP way.

### Codex and other command-line agents

Add an MCP server named `earthonline-layoffs` with the address above, the way your tool adds one. For example:

    codex mcp add earthonline-layoffs --url https://layoffs.earthonlines.com/mcp
    gemini mcp add --transport http earthonline-layoffs https://layoffs.earthonlines.com/mcp

The tools appear in the next session. Until then, use the HTTP way.

### A cloud agent (a routine, a hosted agent, a bot)

If your platform takes a remote MCP server, add https://layoffs.earthonlines.com/mcp with no authentication. If it does not, use the HTTP way: it needs nothing but outgoing requests. EarthOnline Layoffs never calls you, so there is nothing to register.

### A chat app on the web (ChatGPT, Claude.ai), or any tool that can only open web pages

You do not need to connect anything to read: open the pages with GET, as "Read without MCP" below says (a search: https://layoffs.earthonlines.com/?q=tesla). To have the tools as well, your owner adds the server once:

- ChatGPT: Settings, Apps & Connectors, Advanced settings: turn on Developer mode. Then Create: name EarthOnline Layoffs, MCP server URL https://layoffs.earthonlines.com/mcp, Authentication: No authentication.
- Claude.ai: Settings, Connectors, Add custom connector: name EarthOnline Layoffs, Remote MCP server URL https://layoffs.earthonlines.com/mcp.

Then they turn it on for this chat, and you have the `layoffs_` tools.

### A custom GPT

Import https://layoffs.earthonlines.com/openapi.json as its actions. No authentication.

### None of these

Use HTTP. Every tool is POST https://layoffs.earthonlines.com/api/tools/<tool name> with the arguments as a JSON body; the answer is `{"ok": true, "result": …}` or `{"ok": false, "error": {"code", "message"}}`, where the message says what to do next. The tool list with input schemas: GET https://layoffs.earthonlines.com/api/tools.

    curl -s -X POST https://layoffs.earthonlines.com/api/tools/layoffs_search_notices -H "Content-Type: application/json" -d '{"query":"tesla","limit":5}'

## Read without MCP

For an assistant that can only open web pages (no MCP, no POST). Everything below is an ordinary page that opens with a GET: no key, nothing to connect.

- [Search](https://layoffs.earthonlines.com/?q=tesla): `q` takes words of a company name or a place; each word must start a word of the company, the place or the state. Newest notices first, 30 a page. Without `q` (https://layoffs.earthonlines.com/) the page lists the newest notices of every state.
- [State](https://layoffs.earthonlines.com/?state=MI): `state` is a two-letter code ("MI") or a state's name.
- [Since](https://layoffs.earthonlines.com/?since=2026-10-01): `since` is a date, YYYY-MM-DD: notices dated on or after it (the notice date; the effective date where a state gives none).
- [Until](https://layoffs.earthonlines.com/?until=2025-12-31): `until` is a date, YYYY-MM-DD: notices dated on or before it.
- [Minimum workers](https://layoffs.earthonlines.com/?min_workers=500): `min_workers` is a whole number: notices for at least that many workers.
- [Kind](https://layoffs.earthonlines.com/?kind=closure): `kind` is `closure` or `layoff`, as the state marked it; notices a state did not mark are left out by either.
- [Several at once](https://layoffs.earthonlines.com/?q=amazon&state=CA&min_workers=100): the parameters combine.
- [One notice](https://layoffs.earthonlines.com/notice/mi-b541319fa5d74d76): the page of one notice, at `/notice/<id>`: every field, the row exactly as the state published it, and the state page it came from. The ids are in the links of the lists.
- [One company](https://layoffs.earthonlines.com/company/dakkota-integrated-systems): the page of one company, at `/company/<id>`: its notices by state and by year, then the notices themselves. The ids are in the links of the notices.
- [Next page](https://layoffs.earthonlines.com/?cursor=WyIyMDI2LTA5LTI5IiwiY2EtYzg4ZDBiZmM1M2Y1NjkxMCJd): a list ends with a link ("Older notices", `rel="next"`): take it as it is; its address (`cursor` on the search page, `after` on a company's page) is not meant to be written by hand.
- [Data sources](https://layoffs.earthonlines.com/data-sources): which states are covered, and why the others are not.

## Tools

### layoffs_search_notices

Search EarthOnline Layoffs, a public record of US layoffs: the WARN notices employers file with state governments before a plant closing or a mass layoff, read from each state's website. Newest first. Without arguments it lists the latest notices. `query`: words of a company name or a place ("tesla", "amazon seattle", "austin texas"); every word must start a word of the notice. Narrow with `state`, `since`, `until`, `min_workers`, `kind`, or `company` (one company, from layoffs_search_companies). Returns `notices` (each: id, company (id, name, page_url), state, location, workers, notice_date, effective_date, kind (closure, layoff or null), temporary, amendment, page_url, source_url), up to `limit` (default 25, at most 100), and `next_cursor` (call again with `cursor` for more). With `state`, `state_not_covered` says when that state is not covered and why. layoffs_get_notice gives one notice in full.

- `query` (string, optional): Words of a company name or a place: "tesla", "amazon seattle", "fresno". Each word must start a word of the company, the place or the state.
- `company` (string, optional): Only this company's notices: its id (from layoffs_search_companies), its page link, or a name it filed under.
- `state` (string, optional): Only notices filed in this US state: its two-letter code ("CA") or its name ("California").
- `since` (string, optional): Only notices dated on or after this day, YYYY-MM-DD (the notice date; the effective date where a state gives none).
- `until` (string, optional): Only notices dated on or before this day, YYYY-MM-DD.
- `min_workers` (integer, optional): Only notices for at least this many workers.
- `kind` ("closure" | "layoff", optional): "closure" (a plant or site closing) or "layoff" (a mass layoff), as the state marked it. Notices the state did not mark are left out by either.
- `cursor` (string, optional): The `next_cursor` of the previous result, for the next page.
- `limit` (integer, optional): How many notices at most (1 to 100, default 25).

Example:

    curl -s -X POST https://layoffs.earthonlines.com/api/tools/layoffs_search_notices -H "Content-Type: application/json" -d '{"query":"tesla","state":"CA","limit":10}'

### layoffs_get_notice

One WARN layoff notice on EarthOnline Layoffs (a public record of the notices US employers file with state governments before a plant closing or a mass layoff), by its id ("ca-c571f9ae7b5896fd", from layoffs_search_notices) or its page link (…/notice/<id>). Returns the company (id, name, page_url), state, location, workers affected, notice date, effective date, kind (closure or layoff), temporary, amendment, `as_published` (every field of the row exactly as the state published it, minus columns that name people), and `source`: the state agency, its WARN page, when this site read it and with which scraper.

- `id` (string): The notice's id, for example "ca-c571f9ae7b5896fd", or its page link.

Example:

    curl -s -X POST https://layoffs.earthonlines.com/api/tools/layoffs_get_notice -H "Content-Type: application/json" -d '{"id":"ca-c571f9ae7b5896fd"}'

### layoffs_search_companies

Search the companies on EarthOnline Layoffs that filed WARN layoff notices with US state governments (the notices employers file before a plant closing or a mass layoff). `query`: words of the company's name ("amazon", "general motors"); every word must start a word of a name it filed under. Without `query` it lists every company. Narrow with `state`, `since` (a notice on or after that day) and `min_workers` (in all). The latest notice first. Returns `companies` (each: id, name, notices, workers (all its notices together, amendments left out), closures, states, latest_notice, first_notice, page_url), up to `limit` (default 20, at most 100), and `next_cursor` for more. Then layoffs_get_company with an id, or layoffs_search_notices with `company`.

- `query` (string, optional): Words of the company name, for example "amazon" or "kaiser". Leave it out to list every company.
- `state` (string, optional): Only companies with a notice in this US state: two-letter code ("TX") or name.
- `since` (string, optional): Only companies with a notice dated on or after this day, YYYY-MM-DD.
- `min_workers` (integer, optional): Only companies whose notices together affect at least this many workers.
- `cursor` (string, optional): The `next_cursor` of the previous result, for the next page.
- `limit` (integer, optional): How many companies at most (1 to 100, default 20).

Example:

    curl -s -X POST https://layoffs.earthonlines.com/api/tools/layoffs_search_companies -H "Content-Type: application/json" -d '{"query":"amazon"}'

### layoffs_get_company

One company's WARN layoff notices on EarthOnline Layoffs (the notices US employers file with state governments before a plant closing or a mass layoff). `id` is an id from layoffs_search_companies, its page link (…/company/<id>) or a name it filed under ("Tesla, Inc."). Returns the name and the other names it filed under, notices, workers (amendments left out), closures, by_state (notices and workers per state), by_year, top_places, its 20 latest notices (as layoffs_search_notices lists them), the first and latest notice dates, sources (each state agency and its WARN page) and page_url. For more of its notices: layoffs_search_notices with `company`.

- `id` (string): The company: its id (from layoffs_search_companies), its page link, or a name it filed under.

Example:

    curl -s -X POST https://layoffs.earthonlines.com/api/tools/layoffs_get_company -H "Content-Type: application/json" -d '{"id":"tesla"}'

## How to read the numbers

- A WARN notice is the notice an employer gives before a plant closing or a mass layoff. The federal WARN Act (29 U.S.C. 2101–2109) asks it of employers with 100 or more workers, 60 days ahead, and the notice goes to the state; some states have their own laws that reach smaller employers or ask for more time (California, New York, New Jersey among them). The states publish lists of the notices they receive. This site reads those lists.
- `workers` is the number the employer said would be affected, as the state published it. Plans change after filing: a layoff can shrink, grow, move or be called off. A notice is not a count of people laid off.
- `notice_date` is when the notice was filed or received, as the state gives it; `effective_date` is when the layoff or closing was to start. Some states give only one of them.
- `kind` is "closure" or "layoff" where the state's list says which; null where it does not. `amendment` marks a notice the state lists as an update of an earlier one: company totals leave out its workers.
- Company: notices whose company names match without case, punctuation or legal endings (INC, LLC, CORP …) are one company. Different companies with one name are counted as one; a company that filed under two different names is two.
- Coverage is uneven: not every state publishes a list, some lists start years later than others, and a state's scraper can break. Each search narrowed to a state says when that state is not covered.

## Rules

- The notices are public records published by state agencies. Name the state agency (`source`) when you pass one on, and link the notice's page.
- When you pass numbers on, say what they are: workers an employer said would be affected, in a notice filed before the layoff.
