A skill pack your agent
already knows how to use.
Every Coil action exists three ways: a button in the dashboard, a `coil` CLI command, and an MCP skill. This page shows the beta install shape. Skill manifests describe every command, parameter, and return shape, so your agent never has to guess. JSON on every serious path. Coil org API keys with per-key rate limits.
$ coil --json agent-context { "profile": "prod-agent", "actor": { "type": "machine", "id": "ak_***" }, "org": "org_revops", "rate_limit": "60/min/key · 100/min/org", "skills": [ "prospect", "sales-nav", "leads", "recipes", "automations", "smartlead" ], "mcp_endpoints": [ "coil/scrapes", "coil/leads", "coil/recipes", "coil/automations" ], "denied": [ "automations.publish" // admin only ] } $ coil scrapes create --type sales-nav --url "..." --limit 500 --json { "id": "scrape_sn_500", "status": "queued", "audit": "evt_4n2k" }
Install, in code.
One config block per client. Add your COIL_API_KEY, restart the agent. The skill manifest does the discovery. The examples below are the contract Coil is built around, not proof that the public npm packages or hosted OpenAPI URL are live today: org-scoped bearer key in, typed tools and JSON output back.
What the agent does, in your code.
Three workflows your agent (or you) can run from any MCP client or the CLI. Same shape, same response, every time.
Build a list, return rows.
The agent calls scrapes.create with the prompt's intent. Coil dedupes, verifies, and returns the lead set with a stable ID for follow-ups.
$ coil scrapes create \
--type prospect \
--titles "VP Sales,Head of RevOps" \
--geos "United States" \
--sizes "51-200,201-500" \
--limit 200 --json
{
"id": "scrape_q2_rev",
"status": "queued",
"estimate": { "verified_rate": 0.92 }
}Run a recipe end-to-end.
Recipes are typed graphs. Validate first; the API returns provider cost, missing keys, and step issues before any provider call. Then publish.
$ coil recipes validate r_8x2k --json
{
"valid": true,
"estimated_cost_per_1000": "$2.92",
"providers": [
"coil/prospect-db",
"millionverifier",
"predictleads",
"smartlead"
],
"missing_keys": []
}Inspect what an agent ran.
Every mutation is tagged with actor type, actor ID, and timing. Useful when you want to know what your agent actually did at 3am, and what a human did at 9am.
$ coil audit list --since 1h --json
[
{ "actor": "machine", "action": "scrapes.create",
"status": 200, "t": "09:14:03" },
{ "actor": "machine", "action": "recipes.validate",
"status": 200, "t": "09:15:11" },
{ "actor": "machine", "action": "automations.publish",
"status": 403, "t": "09:18:42" },
{ "actor": "human", "action": "automations.publish",
"status": 200, "t": "09:20:06" }
]What's supported, where.
Every row below is something we test in CI. If a column is missing a check, that surface is being added, with an ETA.
| Capability | Claude | Cursor | ChatGPT | Gemini | Generic MCP | CLI / cURL |
|---|---|---|---|---|---|---|
| MCP tool discovery | ✓ | ✓ | · | ✓ | ✓ | · |
| OpenAPI / Actions | · | · | ✓ | β | · | ✓ |
| Skill manifest examples | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Streaming results | ✓ | ✓ | β | β | ✓ | ✓ |
| Coil org API keys | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Per-key rate limits | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Audit log access | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Engineer questions.
The ones you ask before wiring this into something that runs unattended.
Why MCP and not a bespoke protocol?
MCP is the standard agents already speak. Building on it means Coil works in Claude, Cursor, ChatGPT, Gemini, Manus, and every new client that ships MCP support, without bespoke integration work on our side or yours.
What's the rate limit story?
100 req/min per org, 60 req/min per API key, with 2× burst windows. Hit a 429 and the response carries a retry-after. Generous for normal use; tight enough to catch a runaway agent before it costs anyone money.
What does an agent get blocked from doing?
Publishing automations and deleting org-shared records require human admin signatures. The API returns 403 on those paths so your agent can hand off cleanly instead of looping.
Is there an SDK?
The CLI is the SDK shape we are building around: every command returns JSON and can be called from Node, Deno, Bun, or your shell. The MCP server and public npm packages are beta surfaces, so use the snippets on this page as the install contract until signup gives you the current package names. Native Python SDK is on the roadmap.
Wire it into the agent you already trust.
Sign up, grab an org key, paste two lines into your MCP config. The skill manifest does the rest.