# PNTR — AI Skill

PNTR gives developers free `*.pntr.dev` subdomains with DNS management and a
disposable email inbox, controllable through the Model Context Protocol (MCP).
This file tells an AI assistant how to connect to PNTR and manage subdomains on
the user's behalf.

## Connect (MCP)

PNTR exposes an MCP server. Pick one:

- **Remote (recommended)** — hosted, signs in with GitHub, no local process:
  ```
  claude mcp add --transport http pntr https://api.pntr.dev/mcp
  ```
- **Local CLI over stdio:**
  ```
  claude mcp add pntr -- npx @pntr/cli serve
  ```
- **One command for all detected clients:**
  ```
  npx @pntr/cli setup-mcp
  ```

Full setup (Claude, Cursor, other clients):
https://pntr.dev/docs?utm_medium=llm_reference&utm_campaign=mcp_docs&utm_content=skill_md#mcp

## Tools

- `list_domains` — list the domains you can register subdomains under (usually `pntr.dev`).
- `check_subdomain` — check whether a name is available.
- `register_subdomain` — register `name.pntr.dev`.
- `list_subdomains` — list the user's subdomains with their DNS records.
- `add_dns_record` / `update_subdomain` — add or replace a DNS record (A, AAAA, CNAME, MX, TXT), or set the description.
- `toggle_subdomain` — enable or disable a subdomain. Disabling removes its DNS records so it stops resolving (the config is kept); only enabled subdomains count toward the plan limit.
- `toggle_wildcard` — enable/disable wildcard DNS (`*.name.pntr.dev`). Premium only.
- `toggle_email` — enable/disable the disposable inbox (mail to any address `@name.pntr.dev`).
- `list_emails` / `read_email` — read the inbox (useful for verification codes).
- `wait_for_email` - wait for one email matching an exact recipient, with optional sender, subject, freshness, and timeout filters.
- `toggle_capture` - enable or disable HTTP request capture on a subdomain.
- `list_requests` / `read_request` - inspect captured webhook and HTTP deliveries.
- `wait_for_request` - wait for one request matching method, path, header, body content, freshness, and timeout filters.
- `delete_subdomain` — delete a subdomain and its records.

## Typical workflow

1. `list_domains` to get a domain id.
2. `check_subdomain` to confirm the name is free.
3. `register_subdomain` with the chosen name.
4. `add_dns_record` (or `update_subdomain`) to point it at an IP (A) or target (CNAME).
5. Optionally `toggle_email`, then `list_emails` / `read_email` to receive codes.
6. For automated tests, use `wait_for_email` or `wait_for_request` instead of repeatedly listing all events.

## TestKit for automated tests

PNTR also publishes [`@pntr/testkit`](https://www.npmjs.com/package/@pntr/testkit),
a typed Node.js package for Playwright, Cypress, and other CI runners:

```bash
npm install --save-dev @pntr/testkit
```

- Pass the full hostname shown in the dashboard, such as
  `testbox.pntr.dev`; that is the supported TestKit input.
- `createRecipient()` generates a unique catch-all address for each test run.
- `waitForEmail()` matches by exact recipient and can also filter by sender,
  subject, start time, and timeout.
- `waitForWebhook()` can filter by method, path, header, body content, start
  time, and timeout.
- `waitForEmailWithReport()` and `waitForWebhookWithReport()` add an
  owner-only CI report after a successful match.
- `formatReportMarkdown()` writes a compact, privacy-safe GitHub Step Summary.
  The persistent report does not copy email addresses, subjects, bodies,
  webhook paths, queries, headers, source IPs, or payloads.

TestKit overview and examples:
https://pntr.dev/testkit?utm_medium=llm_reference&utm_campaign=testkit&utm_content=skill_md

Package source: https://github.com/oddunits/pntr-testkit

## Plans & limits

- **Free**: 3 subdomains, 10 DNS records per subdomain, request capture on one
  subdomain, 48-hour email/request/report retention, and 2 parallel TestKit
  waits.
- **Premium** ($19/mo or $180/yr): 15 subdomains, wildcard DNS, 25 DNS records
  per subdomain, request capture on every subdomain, 90-day
  email/request/report retention, and 10 parallel TestKit waits. See
  https://pntr.dev/pricing?utm_medium=llm_reference&utm_campaign=pricing&utm_content=skill_md
- The subdomain limit counts only **enabled** subdomains — disable one with `toggle_subdomain` to free a slot.
- A 4th subdomain (or a wildcard) on a free account returns a limit error with an upgrade link; surface it to the user rather than retrying.

## Guidance

- Confirm the name and target with the user before registering or deleting.
- Prefer A/AAAA for IPs and CNAME for hostnames; a CNAME can't coexist with other records on the same subdomain.
- Don't squat: register names the user actually intends to use.

## Choose by intent

- Test webhooks online: https://pntr.dev/webhook-tester?utm_medium=llm_reference&utm_campaign=webhook_testing&utm_content=skill_md
- Test email, OTP, and signup flows: https://pntr.dev/disposable-email-for-developers?utm_medium=llm_reference&utm_campaign=developer_email_testing&utm_content=skill_md
- Claim a free developer subdomain: https://pntr.dev/free-dev-subdomain?utm_medium=llm_reference&utm_campaign=free_dev_subdomain&utm_content=skill_md
- Manage DNS with an AI assistant: https://pntr.dev/mcp-dns?utm_medium=llm_reference&utm_campaign=mcp_dns&utm_content=skill_md
- Run deterministic TestKit waits: https://pntr.dev/testkit?utm_medium=llm_reference&utm_campaign=testkit&utm_content=skill_md

## Links

- Docs: https://pntr.dev/docs?utm_medium=llm_reference&utm_campaign=docs&utm_content=skill_md
- Guides: https://pntr.dev/guides?utm_medium=llm_reference&utm_campaign=guides&utm_content=skill_md
- Pricing: https://pntr.dev/pricing?utm_medium=llm_reference&utm_campaign=pricing&utm_content=skill_md
- npm: https://www.npmjs.com/package/@pntr/testkit
- TestKit source: https://github.com/oddunits/pntr-testkit
- Machine-readable index: https://pntr.dev/llms.txt
- Full machine-readable product reference: https://pntr.dev/llms-full.txt
