# AIpplied Labs for agents

AIpplied Labs is an AI consulting company based in the Chicago area. This page describes the ways an AI agent can talk to it. Nothing here needs an account or an API key.

Every answer these endpoints return comes from the company's own written copy. A small decision model ([Jev](https://typesafe.ai)) picks which written answer fits a question, and it never writes text of its own. When nothing fits, you get a short fallback instead of a guess.

## MCP server

- Endpoint: `https://www.aippliedlabs.com/mcp`
- Transport: Streamable HTTP, stateless, JSON responses
- Server card: [/.well-known/mcp/server-card.json](/.well-known/mcp/server-card.json)

To add it to Claude Code, run:

```sh
claude mcp add --transport http aipplied-labs https://www.aippliedlabs.com/mcp
```

Tools:

- `ask_aipplied_labs`: answers a question about the company, such as cost, timelines, process, data handling, or ownership.
- `find_first_systems`: runs the "Where does your week go?" check. It takes a business type, team size, and a sentence about what eats the week, and it returns up to three systems that fit.
- `list_services`: the six services and the eight systems, with what each one delivers and how long it takes.
- `how_to_book`: how a person books the free 20-minute working session, and what happens next.

## A2A agent

- Endpoint: `https://www.aippliedlabs.com/a2a` (JSON-RPC)
- Agent card: [/.well-known/agent-card.json](/.well-known/agent-card.json)
- Methods: `SendMessage` (A2A 1.0) and `message/send` (A2A 0.3)

Send a text message with a question, and the reply is a single message with the answer. The agent keeps no tasks.

## JSON endpoints

Both are described in [/openapi.json](/openapi.json).

### `POST /api/ask`

Request:

```json
{"question": "How long does a build take?"}
```

Response: `matched` is `true` when a written answer fits, and `paragraphs` holds the answer.

### `POST /api/check`

Request:

```json
{"business": "trades", "team": "2-5", "text": "Chasing quotes on Sundays", "ticks": ["quotes-sit"], "hours": 6}
```

Response: `systems` holds up to three systems, each with `name`, `said`, `get`, and `live`. An empty list means nothing clearly fits.

### `GET /api/health`

Returns `{"status": "ok"}` when the endpoints are up.

## Limits and auth

Anonymous callers get 12 questions and 8 checks per minute per IP address. To get your own limit instead of sharing one per IP, get a free anonymous token. The steps are in [/auth.md](/auth.md).

## In the browser (WebMCP)

The homepage registers the same tools with `navigator.modelContext` in browsers that support WebMCP. It also registers `request_working_session`, which fills in the booking form for a person to review and send.

## Discovery

- [/.well-known/api-catalog](/.well-known/api-catalog): RFC 9727 API catalog
- [/.well-known/ai-catalog.json](/.well-known/ai-catalog.json): ARD manifest
- [/.well-known/agent-skills/index.json](/.well-known/agent-skills/index.json): Agent Skills index
- [/llms.txt](/llms.txt): site overview for language models
- Send `Accept: text/markdown` to `/` to get the homepage as Markdown.
