# JustAutomate developer portal

> Build on the public website of JustAutomate: search and read its pages, get the process workshop price per market and the contact options, over a REST API or an MCP server. Free and read-only, with no sign-up and no API key. Your first call takes one line.

- REST API: https://justautomate.ai/api/v1 ([OpenAPI 3.1](https://justautomate.ai/openapi.json))
- MCP server: https://justautomate.ai/mcp
- Self-serve access token: `POST https://justautomate.ai/agent/auth/` (optional)
- HTML version of this page: https://justautomate.ai/developers/

## Quickstart

### 1. Make your first call, no key needed

```bash
curl "https://justautomate.ai/api/v1/search?q=process+workshop&lang=en"
curl "https://justautomate.ai/api/v1/workshop?market=DE"
```

Responses are JSON. Read a search result as Markdown with `GET /api/v1/page?url=<url>`. Every endpoint, parameter and schema is in the [OpenAPI 3.1 description](https://justautomate.ai/openapi.json).

### 2. Or connect an MCP client

The MCP server at `https://justautomate.ai/mcp` speaks Streamable HTTP (JSON-RPC over POST), protocol `2025-11-25` and older. It needs no authentication and keeps no session.

```json
{
  "mcpServers": {
    "justautomate": {
      "type": "http",
      "url": "https://justautomate.ai/mcp"
    }
  }
}
```

```bash
claude mcp add --transport http justautomate https://justautomate.ai/mcp
```

Without an SDK, one JSON-RPC request is enough:

```bash
curl -s https://justautomate.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_site","arguments":{"query":"process workshop price"}}}'
```

### 3. Optional: get an access token yourself

A token identifies your agent and raises the limit from 120 to 600 requests per minute. One request, no account, no e-mail, no approval:

```bash
curl -s -X POST https://justautomate.ai/agent/auth/ \
  -H "Content-Type: application/json" \
  -d '{"type":"anonymous","requested_credential_type":"access_token"}'
```

Send `credential` from the response as a bearer token, to the API or to the MCP server, and check who you are:

```bash
curl -s https://justautomate.ai/api/v1/identity \
  -H "Authorization: Bearer <credential>"
```

## Access, keys and limits

|  | Without a token | With a token |
|---|---|---|
| Rate limit | 120 requests per 60 seconds per IP address | 600 requests per 60 seconds per registration |
| How to get it | Nothing to do | `POST /agent/auth/`, one request |
| Lifetime | Always on | Access token 1 hour, identity assertion 30 days |
| Scope | Every endpoint and tool | The same: `mcp:read` |

- **API keys are not issued.** The self-serve token replaces them: there is nothing to apply for and no one to e-mail.
- **Renewing:** when the access token expires, exchange the `identity_assertion` at `POST /oauth/token/` instead of registering again. Step by step in [auth.md](https://justautomate.ai/auth.md).
- **Revoking and rotating:** tokens are signed and self-contained, and nothing is stored on our side, so there is nothing to revoke. Stop using a token and it expires within an hour.
- **MCP clients acting for a person** (Claude, ChatGPT, Cursor): OAuth 2.1 authorization code with PKCE and open dynamic client registration. Metadata: [protected resource](https://justautomate.ai/.well-known/oauth-protected-resource/mcp) (RFC 9728) and [authorization server](https://justautomate.ai/.well-known/oauth-authorization-server) (RFC 8414).
- **No accounts and no personal data:** registration asks for nothing, sends nothing and stores nothing.

## Reference

### REST API

Base URL `https://justautomate.ai/api/v1`, version 1.0.0. Paths work with or without a trailing slash, and every GET also answers HEAD. CORS is open, so the API works from a browser too.

| Method | Path | Returns |
|---|---|---|
| GET | `/api/v1` | API description with every endpoint URL |
| GET | `/api/v1/health` | Index status: number of pages, workshop markets, build time |
| GET | `/api/v1/search?q=&lang=&type=&limit=` | Pages matching a query |
| GET | `/api/v1/pages?type=&lang=&limit=&cursor=` | Pages with cursor pagination |
| GET | `/api/v1/page?url=` | One page as Markdown |
| GET | `/api/v1/workshop?market=` | Process workshop price and scope per market |
| GET | `/api/v1/contact?lang=` | E-mail, phone and contact form |
| GET | `/api/v1/identity` | The agent behind the bearer token (token required) |
| POST | `/api/v1/batch` | Up to 10 GET operations in one request |

### MCP tools

Server `https://justautomate.ai/mcp`, version 1.1.0. Every tool is annotated read-only and idempotent.

| Tool | What it does |
|---|---|
| `search_site` | Search justautomate.ai |
| `get_page` | Read a page of justautomate.ai |
| `list_pages` | List pages of justautomate.ai |
| `get_workshop_offer` | Process workshop: price and scope |
| `get_contact_options` | How to contact JustAutomate |

### MCP resources

- `ui://justautomate/workshop-offer.html`: Interactive card (MCP App) with the process workshop price, scope and offer page for each market.
- `https://justautomate.ai/pricing.md`: Public pricing in Markdown: the process workshop per market (net, per week).

## Documentation

- [OpenAPI 3.1 description](https://justautomate.ai/openapi.json): every endpoint, parameter and response schema.
- [API guide](https://justautomate.ai/api.md) (Markdown): authentication, rate limits, pagination, batch, versioning and error codes.
- [auth.md](https://justautomate.ai/auth.md): agent registration and OAuth, step by step.
- [MCP server card](https://justautomate.ai/mcp/server-card): tools, resources and capabilities of the MCP server.
- [API catalog](https://justautomate.ai/.well-known/api-catalog) (RFC 9727) and [AI catalog](https://justautomate.ai/.well-known/ai-catalog.json): everything this site offers to agents.
- [Agent Skills index](https://justautomate.ai/.well-known/agent-skills/index.json): ready-made skills for agents.
- [llms.txt](https://justautomate.ai/llms.txt): the site explained for language models.
- [Entry in the official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers/ai.justautomate%2Fwebsite/versions/latest) (`ai.justautomate/website`) and [listing on Smithery](https://smithery.ai/servers/xawierek/justautomate) (`xawierek/justautomate`).
- Any page as Markdown: send `Accept: text/markdown`, or append `index.md` to the page URL. This portal too: [/developers/index.md](https://justautomate.ai/developers/index.md).

## Testing and sandbox

There is no separate sandbox or test mode, and you do not need one. Every endpoint and tool only reads public website content, has no side effects and is safe to call and retry as often as the rate limit allows. Test against production: the same URLs you will use live, with no data of yours or anyone else's to break.

- Health checks: [API health](https://justautomate.ai/api/v1/health) and [MCP health](https://justautomate.ai/mcp/health) report the version and the size of the index.
- Try it in a browser: [search](https://justautomate.ai/api/v1/search?q=workshop&lang=en), [workshop prices](https://justautomate.ai/api/v1/workshop), [contact options](https://justautomate.ai/api/v1/contact?lang=en), [one page](https://justautomate.ai/api/v1/page?url=/en/).
- MCP Inspector: `npx @modelcontextprotocol/inspector`, transport Streamable HTTP, URL `https://justautomate.ai/mcp`.
- Error handling: `/api/v1/search` without `q` gives `400 invalid-parameter`, an unknown page gives `404 not-found`, and a bad token gives `401 invalid-token` with `WWW-Authenticate`.

## Errors and versioning

- Errors are `application/problem+json` (RFC 9457) with a stable, machine-readable `code`. All codes: [api.md](https://justautomate.ai/api.md).
- Every API response carries `RateLimit-Policy` and `X-RateLimit-Limit`; a `429` carries `Retry-After` in seconds.
- The major version is in the path (`/api/v1`). Changes within v1 are additive only. A deprecated endpoint gets a `Deprecation` header, and a `Sunset` header at least 90 days before removal.

## What the API does not do

It never submits forms, books meetings, sends messages or takes payments, and it holds no client data. The only price it returns is the public price of the process workshop; implementation is quoted after the workshop. When a person wants to get in touch, give them the link or e-mail address from `get_contact_options` or `/api/v1/contact`.

## Support

- E-mail: [contact@justautomate.ai](mailto:contact@justautomate.ai). For a bug in the API or the MCP server, include the request and the response.
- People, not agents, who want to talk about a project: [contact page](https://justautomate.ai/en/contact/).
