---
name: parel
version: 0.2.0
description: >-
  Paid data tools for agents, billed per call in Indian rupees from a prepaid balance: Google web, news and
  maps results, semantic web search, reading a page, finding and verifying work emails, company and person
  enrichment, keyword volumes, rankings and backlinks, what ChatGPT says about a brand, recent Instagram,
  YouTube, TikTok, Reddit and X content, and cited deep-research reports. Use when a task needs live or
  paid data that the user's own tools and your built-in search cannot give. Failed calls and empty results
  cost ₹0. Load this before calling any Parel tool.
---

# Using Parel

<!-- Fill the bracketed names at launch. Keep this file under 6 KB: agents load it every session. -->

## Setup (once)

- **Claude.ai / Claude Desktop:** Settings → Connectors → Add custom connector. Name `Parel`, URL `https://api.parel.si/mcp`, Authentication "Sign in now", OAuth client "Register automatically", then Add. A Parel page opens: sign in with the https://app.parel.si account and click Approve. No key to paste.
- **Claude Code / Cursor:** `claude mcp add --transport http parel https://api.parel.si/mcp --header "Authorization: Bearer <API key>"`. Keys come from https://app.parel.si → API keys (shown once).
- **Your own code, n8n:** `POST https://api.parel.si/v1/run` with the same bearer key. Reference: https://parel.si/docs#api.
- **Verify:** call `check_balance`. A balance in rupees means you are connected. Never paste a key into chat; ask the user to add it where it belongs.

## Before you spend: who goes first

1. The user's explicit instruction for this task.
2. The user's own tools and keys, and your built-in web search for a quick fact. Those cost the user nothing.
3. Parel, for what those cannot do: structured Google results for a country or language, news and maps, a person's work email and whether it is deliverable, company data, keyword volumes and rankings, backlinks, what ChatGPT answers about a brand, recent social posts, a page behind a JavaScript app, a cited research report. **Every call here spends the user's balance.** Offer it; do not silently switch.

## The tools

- **Free:** `discover_tools` (the list, with today's price), `inspect_tool` (one tool's schema, one-of sets, an example input, price and hold), `quote_tool` (the exact charge for an input), `get_run` (status and cost of a call), `check_balance`.
- **Paid:** `search_web`, `find_email`, `get_social_posts`, `check_ai_visibility` and `research` are first-class tools. Every other tool runs through `run_tool` with `tool` and `input`.

## How to call

1. Unsure which tool fits? `discover_tools` with a keyword. Five or fewer results include each tool's `input_schema`; otherwise call `inspect_tool`. **Never guess inputs.**
2. Read the price in the description. Every paid result returns `cost_paise` and `balance_paise`; tell the user what it cost when it matters.
3. `research` costs from about ₹10 (fast) to about ₹1,500 (max). **Always `quote_tool` it, state the cost, and get a yes before running it.**
4. Per-result tools (search, posts, domain search) hold for up to 10 results. Ask for the count you need. One query, one handle, one domain per call, never a list.
5. Working for a named client? Pass `client_tag` so spend shows per client in the dashboard.
6. Keep discover queries short: "email", "instagram", "keywords".

## When it fails (every row cost ₹0)

| You see | Do |
|---|---|
| `insufficient_balance` (402) | Give the user `topup_url` and stop. Do not retry. |
| `budget_exceeded` | Say which cap (`cap`) was hit; the user can raise it in the dashboard. |
| `invalid_input` with `errors[]` | Fix the named fields. `inspect_tool` shows the schema and the one-of sets. |
| `retryable: true` (timeout, upstream busy) | Retry once with the same `idempotency_key`, after `retry_after_seconds` if present. |
| `class: "ok_free"` with a `note` | The tool found nothing. Say so; nothing was charged. |
| `vendor_error` or `upstream_error`, not retryable | The provider refused this call. Change the input or the tool; never loop. |
| `status: "running"` (202) | Call `get_run` with `call_id` after `poll_after_seconds`, until it finishes. |
| Your side timed out and the answer was lost | `get_run` with the `call_id` before running again. No `call_id`? Rerun with the same `idempotency_key`: a repeat of a finished call is ₹0. |
| `_truncated` in the answer | It was cut to fit the context: the first items are intact. Ask for fewer results, or use the REST API for all of it. |

## Rules

- Never run `research` without telling the user the quoted cost first.
- Results can be stale or incomplete; say so when it matters. A found email is the provider's best match until `verify_email` confirms it.
- Found emails and phone numbers are for the user's own, lawful outreach. Bulk unsolicited messaging breaks the Acceptable Use Policy (https://parel.si/legal/acceptable-use).
- A charged answer that was useless can be reported in the dashboard ("Report bad result"); small amounts are refunded automatically.
- The tool schemas are authoritative. If this file and `inspect_tool` disagree, trust `inspect_tool`.

## Examples

- "Find the work email of Jane Doe at acme.com" → `find_email` `{"domain": "acme.com", "full_name": "Jane Doe"}`, then `run_tool` `verify_email` on the result.
- "What did @brand post on Instagram this week?" → `get_social_posts` `{"handle": "brand"}`.
- "Does ChatGPT mention us for 'best CRM for small business in India'?" → `check_ai_visibility` `{"prompt": "best CRM for small business in India", "country": "IN"}`.
- "Latest news about Infosys, India edition" → `run_tool` `{"tool": "search_news", "input": {"q": "Infosys", "gl": "in", "num": 10}}`.
- "A cited report on the Indian EV two-wheeler market" → `quote_tool` on `research` with `{"query": "...", "mode": "fast", "output_formats": ["markdown"]}`, tell the user the cost, then run it and poll `get_run`.
