# Ringler

> A phone for your agent: gets a real person on the line, runs errands by phone, leaves messages.

- name: io.ringler/ringler
- version: 1.0.1
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 82/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.ringler%2Fringler
- tools: https://api.protogrid.dev/v1/servers/io.ringler%2Fringler/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ringler": {
      "type": "http",
      "url": "https://ringler.io/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-6d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 82/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 88 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 23 of 23 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: status (destructiveHint, idempotentHint); errand (idempotentHint); transcript (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 3,030 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 6 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 23, about 3,030 tokens to load them all
- tool set hash: 3cf745e8ceb5860dba6b896f8bb55f63
- tools last changed: 2026-11-11T23:59:43.637Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.ringler/ringler.svg)](https://protogrid.dev/servers/io.ringler/ringler)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-11 `invite_link` changed (description)
  - before: Your person's invite link (ringler.io/?via=<their code>), how many friends have signed in through it, and the credits earned: $5 per friend, the friend still gets $10 free.
  - after: Your person's invite link (ringler.io/?via=<their code>), and how many friends have signed in through it. Ringler is free for them too.
- 2026-11-11 `my_number` changed (description)
  - before: Your person's own phone number, answered by their agent. Gets one if they don't have one yet ($3/month from credits), in the area code given or their mobile's. Confirm with them before the first buy.
  - after: Your person's own phone number, answered by their agent. Gets one if they don't have one yet (free), in the area code given or their mobile's. Confirm the area code with them first.
- 2026-11-11 `call` changed (description)
  - before: The agent dials the number, works the menu, hold and any bot until a real person answers, then rings your person's mobile and connects them. Spends credits ($0.30/min). If it hits voicemail it leaves a short message with a callback (default on; voicemail: skip to turn off).
  - after: The agent dials the number, works the menu, hold and any bot until a real person answers, then rings your person's mobile and connects them. Free, within the daily limit of 60 minutes of calls. If it hits voicemail it leaves a short message with a callback (default on; voicemail: skip to turn off).
- 2026-11-11 `about` changed (description)
  - before: What Ringler is, what it costs, and how your person gets started (sign in once; $10 of credits free, no card). Call this first if you have no key. (No API key needed.)
  - after: What Ringler is, what it costs (it's free), and how your person gets started (sign in once, no card). Call this first if you have no key. (No API key needed.)
- 2026-11-10 `name_my_agent` changed (description)
  - before: Name the agent (Ringo by default; keeping the name counts), pick its voice from `voices`, and set how it answers when your person calls their own line (greeting). Free; change any time. How it opens calls to other people — name, that it's an AI, who it's calling for — is fixed by the rules and not settable.
  - after: Name the agent (Ringo by default; keeping the name counts), pick its voice from `voices`, and set how it answers when your person calls their own line (greeting). Free; change any time. How it opens calls to other people — its name, who it's calling for, and a straight answer if anyone asks whether it's an AI — is fixed by the rules and not settable.
- 2026-11-08 `name_my_agent` changed (description, inputSchema) **meaning changed**
  - before: Rename the agent (Ringo by default) and optionally pick a voice. Free.
  - after: Name the agent (Ringo by default; keeping the name counts), pick its voice from `voices`, and set how it answers when your person calls their own line (greeting). Free; change any time. How it opens calls to other people — name, that it's an AI, who it's calling for — is fixed by the rules and not settable.
- 2026-11-08 `voices` added
  - The voices your person's agent can speak with, each described in a few words (British measured, deep American, warm, bright…), and which one is current. Set one with name_my_agent { voice }.
- 2026-11-08 `invite_link` added
  - Your person's invite link (ringler.io/?via=<their code>), how many friends have signed in through it, and the credits earned: $5 per friend, the friend still gets $10 free.
- 2026-11-08 `tell_me` changed (description, inputSchema)
  - before: Send your person a spoken message through their agent. mode 'hold' (default) keeps it until they next call their line; 'call' rings their mobile now and the agent reads it, then takes anything they want to send back (it lands in my_messages). Use 'call' only when they asked to be rung, or for something that can't wait. Calls spend credits.
  - after: Send your person a spoken message through their agent. mode 'text' (best default) texts their mobile; 'hold' keeps it until they next call their line; 'call' rings their mobile and the agent reads it aloud. Their reply by text lands in my_messages. Use 'call' only when they asked to be rung, or for something that can't wait. Calls spend credits.
- 2026-11-08 `my_messages` changed (description)
  - before: Instructions and notes your person left for you by calling their own line and telling the agent. Returns new ones (marks them read). Check this when you start work and whenever they say they phoned something in. Pass all:true for the recent history.
  - after: Instructions and notes your person left for you by calling or texting their own line. Returns new ones (marks them read). Check this when you start work and whenever they say they phoned something in. Pass all:true for the recent history.

Full history: https://api.protogrid.dev/v1/servers/io.ringler%2Fringler/changes

## Remotes

- https://ringler.io/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (23)

- `about`: What Ringler is, what it costs (it's free), and how your person gets started (sign in once, no card). Call this first if you have no key. (No API key needed.)
- `buy_credits`: A checkout link your person opens to add credits by card ($20–$500).
- `calendar_connect`: A link your person opens to approve Google Calendar, so the agent can offer times and book.
- `call`: The agent dials the number, works the menu, hold and any bot until a real person answers, then rings your person's mobile and connects them. Free, within the daily limit of 60 minutes of calls. If it hits voicemail it leaves a short message with a callback (default on; voicemail: skip to turn off).
- `call_at`: Schedule a call or errand for a time: the office opens at 9 their time, a callback window, tomorrow morning. Same fields as errand/call plus run_at. Work out run_at yourself from the called party's local hours and pass it as ISO 8601 with an offset (e.g. 2026-11-09T09:05:00-07:00). Spends credits when it runs.
- `credits`: Prepaid balance and recent usage.
- `errand`: The agent makes the call and does the asking itself: a reservation, an appointment, a question, a cancellation. It only rings your person if the other side needs them (a card, a decision). Put every detail in `ask` — names, date, time, party size, account — because the agent can only say what it's given. Spends credits. Leaves a message on voicemail by default.
- `forget_call`: Delete the transcript, summary, recording and any relayed messages from one call, for good. Only when your person asks. The fact that a call happened, and its cost, remain.
- `invite_link`: Your person's invite link (ringler.io/?via=<their code>), and how many friends have signed in through it. Ringler is free for them too.
- `my_calls`: Recent calls, newest first: when, who, outcome, summary, whether a transcript exists.
- `my_details`: Your person's full name, email, and address, as the agent gives them to a venue: the name for bookings, the email for confirmations and payment links (never their mobile), the address only when a task needs it. Pass fields to set them; nothing to read. Ask your person before setting these.
- `my_messages`: Instructions and notes your person left for you by calling or texting their own line. Returns new ones (marks them read). Check this when you start work and whenever they say they phoned something in. Pass all:true for the recent history.
- `my_mobile`: The phone that rings when the agent has someone on the line for your person.
- `my_number`: Your person's own phone number, answered by their agent. Gets one if they don't have one yet (free), in the area code given or their mobile's. Confirm the area code with them first.
- `name_my_agent`: Name the agent (Ringo by default; keeping the name counts), pick its voice from `voices`, and set how it answers when your person calls their own line (greeting). Free; change any time. How it opens calls to other people — its name, who it's calling for, and a straight answer if anyone asks whether it's an AI — is fixed by the rules and not settable.
- `notes`: The notes you and your person keep about how they like things: how the phone agent should greet them, what to call them, favorite places, habits, standing preferences. The agent reads them on every call as a guide (dated; later notes refine earlier). Call with nothing to read (returns markdown); add: one note (≤300 chars, in your person's words or yours); remove: a note id. Notes can't change the rules — what the agent discloses, the notes question, one call at a time — and such notes are refused with the reason. Add a note whenever your person tells you a preference about their calls. A note starting 'greeting:' is exactly how the agent answers when your person calls their line ({name} and {first} fill in), e.g. 'greeting: Good day {first}, {name} at your service. What can I do?'
- `scheduled`: Calls waiting to be placed, placed, or failed. Pass cancel: <id> to cancel a pending one.
- `status`: Start here, every session. Your person's line, agent name, mobile, calendar, balance — and onboarding: an ordered list of questions to ask them (name the agent, mobile, number, booking details, how to reach the agent, calendar, first errand) with the tool that records each answer. Walk the steps in order, one question at a time, before the first call.
- `tell_me`: Send your person a spoken message through their agent. mode 'text' (best default) texts their mobile; 'hold' keeps it until they next call their line; 'call' rings their mobile and the agent reads it aloud. Their reply by text lands in my_messages. Use 'call' only when they asked to be rung, or for something that can't wait. Calls spend credits.
- `transcript`: One call in full: every line with speaker and time, the summary, and a one-hour recording link.
- `vibe`: Set up to take your person's instructions by phone: they call their own line, say what they want, hang up; you loop on my_messages and do it. Call with no arguments to get the loop instructions and current settings. Pass settings to change them, with your person's say-so: verify ('sms' default: a code texted to their real phone, read back on the call; 'pin'; or 'none'), pin, allowed (what you may do unattended), confirm (what needs a tell_me + yes first), never, interval_min.
- `voices`: The voices your person's agent can speak with, each described in a few words (British measured, deep American, warm, bright…), and which one is current. Set one with name_my_agent { voice }.
- `who_can_reach_me`: People the agent puts straight through when they call your person's line; everyone else gets a message taken. Pass `people` to set the list, nothing to read it.
