# Kviria

> Location understanding for AI agents: know where, then navigate there. Beta: contiguous US.

- name: com.kviria/kviria
- version: 2.0.0
- connection class: R2 (oauth_consent_once)
- trust: 83/100 flags: no-repository
- quality: 70/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.kviria%2Fkviria
- tools: https://api.protogrid.dev/v1/servers/com.kviria%2Fkviria/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "kviria": {
      "type": "http",
      "url": "https://api.kviria.com/mcp",
      "headers": {
        "Authorization": "Bearer ${KVIRIA_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${KVIRIA_TOKEN}`.

## Trust

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

## Quality 70/100 (needs work)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: kviria (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
- pass `tools.token_cost`: about 922 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 50 (weight 15)

- pass `stability.changes`: 1 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

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

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

- tools: 1, about 922 tokens to load them all
- tool set hash: c6cf5f8dad741b55f51adba8096f2ecf
- tools last changed: 2026-10-09T04:36:24.596Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.kviria/kviria.svg)](https://protogrid.dev/servers/com.kviria/kviria)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-09 `kviria` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Kviria narrows a user's spoken reference down to exactly one place or address and returns its verified coordinate with an evidence trail. Call it with the user's raw message and their current anchor {lat, lng}. Phrase your reply from the returned facts ONLY: state names, distances, and categories exactly as returned; never invent distances, crosswalks, landmarks, opening hours, or any sensory detail. For a 'confirm' decision, ask the user "is it {name} ({distanceM} m)?" and pass their bare yes/no back as the next transcript, echoing the candidates array verbatim. For 'candidates', list them with their distances and ask which one; on the user's next message echo the SAME candidates array back so the engine binds the pick mechanically. Preserve the pendingConfirm marker on the candidate it came with. The target is the final outcome: present its coordinate, never paraphrase the place name. If the user rejects (no), present the returned candidates or ask for more detail. Do not call with invented anchors; the anchor is the user's real position. Kviria is in beta: current coverage is the contiguous United States (approximately lat 24.4 to 49.5, lng -125.0 to -66.8). Queries outside the covered area return an honest notFound with an out_of_coverage evidence entry, and that turn is free. Tell the user the area is outside current coverage instead of retrying.
  - after: Kviria finds the place, address or street corner a user means near their current position and returns its verified coordinate with an evidence trail. When to call: on every user turn of a place conversation, from the first time the user mentions a place, a kind of place, an address, a street, a corner or what is around them, until the place is settled. That includes yes or no answers, picks ("the second one"), corrections ("no, the other one"), follow-ups ("what's across from it") and questions about your last answer ("are you sure?"). Kviria resolves each of these from the state, so do not answer them yourself. What to send: transcript is the user's whole last turn, word for word. state is the `state` field of the previous kviria response, copied exactly: that field only, never the whole response; send an empty string on the first call. anchor is the user's current position exactly as you were given it: send it on the first call, and after that only when the position changes; never invent or round it. What comes back, and your move: one - the place is settled; say its name and distance exactly as returned. one_unconfirmed - ask "Is it {name} ({distanceM} m)?" and send the user's answer as the next call. many - name the candidates with their distances, ask which one, and send the user's answer as the next call. none - Kviria looked and found nothing; say so and ask for a nearby business or landmark. unclear - ask the user to say more about the place. not_a_place_request - the user's words are not about a place; reply to the user yourself. Phrase your reply from the returned facts only; never invent a place, a distance or any other detail. Distances are meters; convert them for your user. Coverage: the contiguous United States. Outside it the answer is none with an out_of_coverage entry and the turn is free; tell the user instead of retrying. Errors: 400 invalid_state means the state was altered; start again with an empty state. 503 parser_unavailable: do not retry the call. Tell the user you cannot look it up right now and to ask again in a moment; never ask the user to rephrase for it.

Full history: https://api.protogrid.dev/v1/servers/com.kviria%2Fkviria/changes

## Remotes

- https://api.kviria.com/mcp (streamable-http, auth oauth2, reachable true, uptime30d 1)

## Packages

_none_

## Tools (1)

- `kviria`: Kviria finds the place, address or street corner a user means near their current position and returns its verified coordinate with an evidence trail.

When to call: on every user turn of a place conversation, from the first time the user mentions a place, a kind of place, an address, a street, a corner or what is around them, until the place is settled. That includes yes or no answers, picks ("the second one"), corrections ("no, the other one"), follow-ups ("what's across from it") and questions about your last answer ("are you sure?"). Kviria resolves each of these from the state, so do not answer them yourself.

What to send: transcript is the user's whole last turn, word for word. state is the `state` field of the previous kviria response, copied exactly: that field only, never the whole response; send an empty string on the first call. anchor is the user's current position exactly as you were given it: send it on the first call, and after that only when the position changes; never invent or round it.

What comes back, and your move: one - the place is settled; say its name and distance exactly as returned. one_unconfirmed - ask "Is it {name} ({distanceM} m)?" and send the user's answer as the next call. many - name the candidates with their distances, ask which one, and send the user's answer as the next call. none - Kviria looked and found nothing; say so and ask for a nearby business or landmark. unclear - ask the user to say more about the place. not_a_place_request - the user's words are not about a place; reply to the user yourself.

Phrase your reply from the returned facts only; never invent a place, a distance or any other detail. Distances are meters; convert them for your user.

Coverage: the contiguous United States. Outside it the answer is none with an out_of_coverage entry and the turn is free; tell the user instead of retrying.

Errors: 400 invalid_state means the state was altered; start again with an empty state. 503 parser_unavailable: do not retry the call. Tell the user you cannot look it up right now and to ask again in a moment; never ask the user to rephrase for it.
