# ask.imeatsack.com

An agent asks. A human answers. Create a questionnaire, paste the link, wait. No install, no setup, no dashboard to learn.

This URL is the MCP server. Browsers get a short page. Agents should fetch `https://ask.imeatsack.com/mcp.md` or send `Accept: text/markdown`. The Cursor skill is `https://ask.imeatsack.com/skill.md`.

## Connect

- MCP (Streamable HTTP): `https://ask.imeatsack.com/mcp`
- Skill: [https://ask.imeatsack.com/skill.md](https://ask.imeatsack.com/skill.md)
- This guide: [https://ask.imeatsack.com/mcp.md](https://ask.imeatsack.com/mcp.md)
- HTTP create: `POST https://ask.imeatsack.com/api/v1/sessions`
- Cursor install: https://cursor.com/en/install-mcp?name=ask.imeatsack.com&config=eyJ1cmwiOiJodHRwczovL2Fzay5pbWVhdHNhY2suY29tL21jcCJ9
- Cursor plugin: [https://github.com/garylesueur/askmeatsack](https://github.com/garylesueur/askmeatsack) — MCP plus the skill
- Grok: [grok.com/connectors](https://grok.com/connectors) — Custom, paste the MCP URL. There is no one-click badge yet.

There is no API key. Create is open today. Creating will later need a lanyard account; that account is free unless they want teams or a custom domain. The person answering never signs in.

## Install plugin

Use the [installation guide](https://ask.imeatsack.com/install) for step-by-step setup and copyable commands.

The [Meatsack marketplace](https://github.com/garylesueur/meatsack-marketplace) includes ask.imeatsack.com, show.imeatsack.com, and share.imeatsack.com. Each plugin packages its hosted MCP connection and workflow skill. Install the ones you need.

### Codex

```sh
codex plugin marketplace add garylesueur/meatsack-marketplace
```

Restart the desktop app, open Plugins, choose Meatsack, then install ask.imeatsack.com. Adding the marketplace makes all three plugins available; install the ones you need.

### Claude Code

```text
/plugin marketplace add garylesueur/meatsack-marketplace
/plugin install askmeatsack@meatsack
```

Confirm the Claude Code install in the plugin panel, then start a new session.

### Cursor

On Teams or Enterprise, a team admin opens Dashboard → Plugins & MCPs → Add Marketplace → Import from Repo. Use https://github.com/garylesueur/meatsack-marketplace, review the plugins, set access, and save. Install ask.imeatsack.com from Customize.

For a local install:

```sh
git clone https://github.com/garylesueur/meatsack-marketplace.git
mkdir -p ~/.cursor/plugins/local/askmeatsack
cp -R meatsack-marketplace/plugins/askmeatsack/. ~/.cursor/plugins/local/askmeatsack/
```

Restart Cursor or run Developer: Reload Window after copying the plugin. Confirm its skill and MCP server in Customize. Local plugin imports must be allowed.

## Tool

One tool, named `ask.imeatsack.com`. Actions: `create`, `status`, `wait`, `cancel`, `edit`.

POST JSON-RPC to `https://ask.imeatsack.com/mcp`. Do not invent extra tools, a Slack bot, or a mailer of your own.

## Skill

# ask.imeatsack.com

Create a questionnaire, put the answer link where the human will see it, then wait. Do not invent another form or a Slack bot.

The product is **ask.imeatsack.com**. The tool is named `ask.imeatsack.com`. HTTP and the tool are the same questionnaire. Answer links look like `https://ask.imeatsack.com/s/…`.

Product homepage and HTTP API: `https://ask.imeatsack.com`. Connect MCP at `https://ask.imeatsack.com/mcp`.

There is no API key. Create is open today. Creating will later need a lanyard account; that account is free unless they want teams or a custom domain. The person answering never signs in. After create, keep `pollUrl` (or its `token`) and `manageUrl` for status, wait, cancel, inspect, and edit.

Use this in a live chat, or from an unattended job that still needs facts, files, or an ID from a person.

## In this conversation

1. Call `ask.imeatsack.com` with action `create` (or `POST /api/v1/sessions`). Send title, optional context, the questions, and optional expiry, metadata, callback URL, or `appearance` (`theme`: `ask`, `paper`, `grove`, or `ember`). Omit `appearance` to follow the person’s system light or dark. Each theme has both modes. Set `mode` to `light` or `dark` only if you must force one. Set `allowFiles` on a question if they should attach files (they can choose, drop, or take a photo; at most five, 4 MB each). The human sees one question at a time, can jump back via the step numbers, and reviews before submit. This service does not score answers — you interpret them.
2. You always get `answerUrl`, `machineUrl`, `pollUrl`, and `manageUrl` immediately. Paste **`answerUrl` into this conversation** so the person answering can open it. Keep `manageUrl` for yourself: open it, or fetch it as markdown, to see the questions and status. The manage page is a stacked owner summary — it is not what the human sees. While nobody has answered, action `edit` (or `PATCH` the session) can change title, context, questions, appearance, or expiry. The answer link stays the same. If the respondent is an agent, they can fetch `answerUrl` with `Accept: text/markdown`, or `machineUrl`, then PUT answers as JSON. Do not wait for them to ask for the link.
3. Wait with action `wait` (pass `sessionId` and `agentToken` from `pollUrl`). One call sits for up to 50 seconds. That is how long a request may hang, not how long the person has — the questionnaire stays answerable until it expires, 24 hours by default. If nothing has been submitted yet the reply says `timedOut: true` and `nextAction: "wait"`: **call `wait` again, and keep calling.** Someone taking ten minutes or two hours is the normal case, not a fault. Poll `status` the same way if you would rather not hold the line.
4. If you cannot sit in that loop, set `callbackUrl` at create instead. On a terminal status the service POSTs `{ sessionId, status, answers }` to it once, retrying a few times if the receiver is down. `status` and `wait` then report `callback.delivered`, so a hook that failed does not read like one you never set. A failed POST does not undo the status.
5. When status is `submitted`, continue with the answers. `expired` and `cancelled` are finished too — do not keep asking.

## When you are running a job

You do not need a human in this chat. If you were given work to fill records, chase missing facts, or collect files and you cannot find them, ask. A Grok bot populating HR, a nightly sweep, or any unattended run is the same product.

One person, one questionnaire. Each ask is unique to what you still need from that person — their ID, a passport scan, leftover invoices, a missing field. Do not reuse one `answerUrl` across a list. Two people on one link overwrite each other.

Put their record key (employee id, ticket, email) in `metadata` so you can match the answers when they come back. The human never sees that metadata.

Put `answerUrl` wherever you already reach them — chat, mail, or anything else you can already send. This service does not send mail. Set `callbackUrl` if you will not sit waiting in a conversation; you can still poll `status` or `wait` later. On a terminal status the service POSTs `{ sessionId, status, answers }` once, retrying a few times if the receiver is down, and records the outcome in `callback.delivered`. Check it — if delivery failed, fall back to polling rather than waiting for a hook that will not arrive. Then continue the job with those answers.

## What a question can carry

The prompt is the ask — one short sentence the human can read as a heading. Put the situation in `detail` as a lump of markdown: prose, lists, tables, links or bare URLs, images, and mermaid code fences (language mermaid). Do not jam a brief, a table of figures, and the ask into `prompt`.

Prompts and `detail` are markdown. On a wide screen the human sees `detail` in a rail beside the question; on a narrow screen it sits under the prompt. Option labels stay plain text. Raw HTML is not rendered.

Use that when you need more than a tap: leftover invoices, a sketch of a situation, a policy link, a diagram. Keep tap-only questions short when you want speed — a single choice with no comment or files advances as soon as they pick.

Do not use “I will answer in the comment” when the human should fill in known rows or named amounts. Use `items` (two to sixteen rows, each with `id`, `label`, optional `hint`) or `fields` (two to eight named boxes). The human types beside each row. Answers come back as `entries` keyed by those ids. A question cannot mix options, items, and fields.

`allowComment` is only valid on a choice, items, or fields question. Do not set it on free text or on a photo-only question (no options, items, or fields). Free text already is the comment; `allowFiles` does not make a comment legal. Photo plus comment works when the question also has options, items, or fields.

For a drawing, set `sketch: true` on the question (no options, items, fields, comment, or files). The human draws with pen, line, rectangle, ellipse, arrow, and text. Status returns `sketch` (shapes on a 0–1 board) plus `previewFileId` when a PNG snapshot was uploaded. Optional create-time `background` (`filename`, `contentType`, `data` as base64) puts a picture under the drawing; the scene is still only what they drew. A background that is not a usable image is refused and no answer link is returned.

For money, set `input: "money"` and an ISO 4217 `currency` on the row or the question (`GBP`, `USD`, `EUR`). Put a known figure in `amount` as a canonical decimal (`2476.80`), not in the label. The human sees a formatted amount, and a currency-prefixed box when they type money. Answers stay canonical decimals in that currency. Do not convert. Mixed currencies are per-row. If a choice option is an amount, put the symbol in the label (`£6,500`).

If you were sent an ask.imeatsack.com `/s/…` link and you already have the answers, fetch it as markdown and PUT. If you do not, give the HTML link to the human. Do not invent answers.

## Someone who is not in this conversation

Giving `answerUrl` to them (in chat, mail, Slack, or anywhere you can already post) is **your** job. This service does not send mail and does not post to other chats. Then wait the same way as above.

## Do not

- Name extra tools. There is one tool, `ask.imeatsack.com`, with actions `create`, `status`, `wait`, `cancel`, and `edit`.
- Put the agent status secret or `manageUrl` on the answering page or anywhere the respondent should not see it.
- Treat Slack (or any other chat) posting as a feature of this product.
- Share one answer link across a list of people, or invent a second form because the ask is automated.

## HTTP

Same questionnaire as the tool.

```
POST https://ask.imeatsack.com/api/v1/sessions
Content-Type: application/json

{
  "title": "Quick check",
  "questions": [{
    "id": "Q1",
    "prompt": "Ship it?",
    "options": [
      {"id": "yes", "label": "Yes"},
      {"id": "no", "label": "Not yet"}
    ]
  }]
}
```

Create returns `answerUrl`, `machineUrl`, `pollUrl`, and `manageUrl`. Keep the token on `pollUrl` and `manageUrl` for status, wait, cancel, inspect, and edit. Paste `answerUrl` where the human will see it.

- Status: `GET /api/v1/sessions/{sessionId}?token=`
- Edit while pending: `PATCH /api/v1/sessions/{sessionId}?token=`
- Manage summary: `GET /s/{sessionId}/manage?token=` (markdown at `.md`)
- Wait: `POST /api/v1/sessions/{sessionId}/wait` (bound at most 60 seconds; one call sits up to 50, then answers `timedOut: true` with `nextAction: "wait"` — call it again)
- Cancel: `POST /api/v1/sessions/{sessionId}/cancel`

## Machine answering

If your user hands you an answer link, you can answer on their behalf. Fetch it with `Accept: text/markdown`, or use `machineUrl` (append `.md` to the path before the query string, preserving the token). The HTML and Link headers advertise this document, and `/llms.txt` explains this path.

The document includes every question, option ids, saved answers, current status, expiry, the exact save and submit URLs, and JSON Schema. Read it before preparing answers. Ask your user for any missing information; do not invent answers or select recommended options automatically.

Send one `PUT` to the document's answers URL with `Content-Type: application/json`, `answers` keyed by question id, and `submit: true`. This saves and submits together. Confirm `submitted.status: "submitted"` in the response. All required questions still need usable answers. To save a draft, omit `submit`; to finish a saved draft, POST the submit URL. If an error occurs, valid answers may already be saved: reread the document and correct the problem while it is open. Closed questionnaires cannot be edited.

The public answer token is enough: no account, API key, MCP connection, or browser clicks are required. File questions use the upload endpoint documented in the questionnaire, then returned file ids in the answer body. Humans can still use the browser form, one question at a time.

## Do not

- Index or share questionnaire pages (`/s/…`). Those are private links.
- Put the agent status secret or manageUrl on the answering page or anywhere the respondent should not see it.
- Treat Slack (or any other chat) posting as a feature of this product.
