Endpoints for agents
Every number on this site is also available as a tool call. There is no key, no sign-up and no rate card: the whole index is static JSON behind a CDN, so an agent reading it costs us nothing. What we ask in return is that the release identifier travels with the figure.
The four ways in
| Protocol | Endpoint | Use it when |
|---|---|---|
| MCP | https://taskexposure.org/mcp |
Your client speaks Model Context Protocol. Streamable HTTP, JSON-RPC 2.0, five read-only tools, no authentication. |
| JSON API | https://taskexposure.org/api |
You want a plain GET. The OpenAPI 3.1 description is at /api/openapi.json. |
| A2A | https://taskexposure.org/a2a |
You are an agent talking to an agent. One synchronous skill, asked in words. Card at /.well-known/agent-card.json. |
| Markdown | https://taskexposure.org/md/<occupation> |
You would rather read prose than parse a schema. Index of the markdown views. |
Discovery documents, for clients that look before they ask: mcp.json, ai-catalog.json, api-catalog, agent-skills/index.json, llms.txt.
The five tools
| Tool | Returns | Same thing over HTTP |
|---|---|---|
search_occupations | Occupations matching a job title, with their three shares, band, rank and median pay. | GET /api/search?q=nurse&limit=10 |
get_occupation | The full record for one occupation: rubric means, rank, percentile, pay, employment, most and least exposed tasks. | GET /api/occupation/lawyers |
compare_occupations | Two occupations side by side and which factor, capability or friction, the gap comes from. | GET /api/compare?a=lawyers&b=paralegals |
rank_occupations | Most or least exposed, filterable by band and by minimum median pay. | GET /api/rank?order=least_exposed&limit=20 |
get_methodology | The rubric, the formulas, the inter-rater reliability and the list of things this index does not claim. | GET /api/methodology |
Add it to an MCP client
claude mcp add --transport http taskexposure https://taskexposure.org/mcp
Or, in a client that takes a config file:
{
"mcpServers": {
"taskexposure": {
"type": "http",
"url": "https://taskexposure.org/mcp"
}
}
}
A bare GET /mcp in a browser returns the server card rather than an
error, so you can check the endpoint is alive without a client.
Rules of use
- Quote the release. Figures are re-scored every quarter against a dated capability reference. A number without its release identifier cannot be checked, and we will not stand behind it.
- Exposure is not displacement. The index measures what current systems can produce and what structurally stands in the way. It models no adoption, no employment effect and no wage effect. Every tool response repeats this, because the caveat should travel with the data and not sit on a page the agent never reads.
- Licence. CC BY 4.0. Attribute to the publisher and link the page you took the figure from. Licence the underlying ratings if you need the task level scores or the quarterly deltas.
- No write operations. Nothing here can be created, changed or bought. There are no accounts and no personal data, so there is nothing to authenticate and auth.md says exactly that.
- Be reasonable. Responses are cached for an hour at the edge and the whole index is one 300 kB file at /data/occupations.json. If you need all 923 occupations, take the file once rather than the endpoint 923 times.
Inside a browser
Every page on this site registers two WebMCP tools when the browser exposes a model
context, so an assistant working in the page can call
search_occupations and get_occupation_exposure directly instead
of reading the rendered table. Nothing is registered in a browser without that API, and
nothing about the visitor is sent anywhere.
Corrections
If a tool returns something that contradicts a page, that is a bug and we want it: [email protected]. The API reads the same published JSON the pages are built from, so the two cannot disagree by design, which makes any disagreement worth a report.