Kviria
Server Details
Location understanding for AI agents: know where, then navigate there. Beta: contiguous US.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 94.6% over 30 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of misselection between tools. Its purpose (resolve a place from a user turn plus state) is stated unambiguously, and the description enumerates the response modes that steer the agent's next move.
With a single tool named after the server, there is no pattern to violate and no mixed convention. The name is a plain lowercase noun, readable and stable.
A single tool is thin for most servers, but here the entire domain is one stateful operation (resolve the place the user means), so one tool is a defensible design rather than an oversight. It earns its place by handling resolve, confirm, disambiguate, and error paths through the state field.
The description covers the full conversational lifecycle: first call with anchor, subsequent calls with state, all terminal outcomes (one, one_unconfirmed, many, none, unclear, not_a_place_request), coverage limits, and both documented error codes. No obvious agent-facing gap remains.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
kviria34 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / definitionsRemoved value: -{ - "find_target": { - "description": "An entity lookup: ref (gers from a previous response), name (exactly as returned), or index (1-based into echoed candidates). Raw coordinates belong to the spatial actions.", - "oneOf": [ - { - "properties": { - "ref": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "properties": { - "name": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - { - "properties": { - "index": { - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "index" - ], - "type": "object" - } - ], - "type": "object" - }, - "target_anchor": { - "description": "The anchor to act on: ref (gers from a previous response), name (exactly as returned), index (1-based into echoed candidates), or at (raw coordinates). Never a free description.", - "oneOf": [ - { - "properties": { - "ref": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "properties": { - "name": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - { - "properties": { - "at": { - "properties": { - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - } - }, - "required": [ - "lat", - "lng" - ], - "type": "object" - } - }, - "required": [ - "at" - ], - "type": "object" - }, - { - "properties": { - "index": { - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "index" - ], - "type": "object" - } - ], - "type": "object" - } -} - removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "transcript" - ] - }, - { - "required": [ - "intent" - ] - } -] - added
Input schema / properties / anchor / additionalPropertiesAdded value: +false - changed
Input schema / properties / anchor / descriptionPrevious value: -"The user's current position - Kviria resolves relative to this point."New value: +"The user's current position - Kviria resolves relative to this point. Required on the first call of a conversation; later calls may leave it out while the user has not moved." - added
Input schema / properties / anchor / properties / lat / maximumAdded value: +90 - added
Input schema / properties / anchor / properties / lat / minimumAdded value: +-90 - added
Input schema / properties / anchor / properties / lng / maximumAdded value: +180 - added
Input schema / properties / anchor / properties / lng / minimumAdded value: +-180 - removed
Input schema / properties / candidatesRemoved value: -{ - "description": "The pending candidates from the previous response, echoed VERBATIM (including the pendingConfirm marker) so clarification answers and confirm yes/no bind mechanically.", - "items": { - "properties": { - "category": { - "maxLength": 256, - "type": [ - "string", - "null" - ] - }, - "distanceM": { - "minimum": 0, - "type": "number" - }, - "gers": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "location": { - "properties": { - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - } - }, - "required": [ - "lat", - "lng" - ], - "type": "object" - }, - "name": { - "maxLength": 512, - "type": [ - "string", - "null" - ] - }, - "pendingConfirm": { - "description": "Marks the confirm-gate target; echo it back exactly as received.", - "type": "boolean" - } - }, - "required": [ - "gers" - ], - "type": "object" - }, - "maxItems": 50, - "type": "array" -} - changed
Input schema / properties / confirmation / descriptionPrevious value: -"\"on\" (default): a single survivor emits a confirm decision, and the coordinate is released only after the user verifies it. \"off\": agents without a human in the loop get direct resolution."New value: +"\"on\" (default): a place the user named only in part is returned as one_unconfirmed, and its coordinate is released only after the user verifies it. \"off\": it is returned as one immediately, for agents without a human in the loop." - removed
Input schema / properties / intentRemoved value: -{ - "description": "The structured meaning of the user's words. Send exactly one of transcript or intent. Category filters take EXACT labels from the area's real categories (provided in every response). Unfiltered `across` returns the place on the opposite side with its own category; add categoryAny to ask for a specific kind. Full mapping rules: https://kviria.com/skill.md", - "oneOf": [ - { - "properties": { - "action": { - "const": "find" - }, - "target": { - "$ref": "#/definitions/find_target" - } - }, - "required": [ - "action", - "target" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "search" - }, - "categoryAny": { - "description": "Exact labels the user WANTS (e.g. [\"mexican_restaurant\"])", - "items": { - "type": "string" - }, - "type": "array" - }, - "categoryNot": { - "description": "Exact labels the user rejects (e.g. [\"cafe\"])", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "properties": { - "action": { - "const": "neighbors" - }, - "of": { - "$ref": "#/definitions/target_anchor" - }, - "side": { - "enum": [ - "left", - "right" - ] - } - }, - "required": [ - "action", - "of" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "near" - }, - "categoryAny": { - "items": { - "type": "string" - }, - "type": "array" - }, - "categoryNot": { - "items": { - "type": "string" - }, - "type": "array" - }, - "of": { - "$ref": "#/definitions/target_anchor" - } - }, - "required": [ - "action", - "of" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "across" - }, - "categoryAny": { - "items": { - "type": "string" - }, - "type": "array" - }, - "of": { - "$ref": "#/definitions/target_anchor" - } - }, - "required": [ - "action", - "of" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "along" - }, - "n": { - "minimum": 1, - "type": "integer" - }, - "street": { - "type": "string" - } - }, - "required": [ - "action", - "street", - "n" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "at_address" - }, - "number": { - "type": "string" - }, - "street": { - "type": "string" - } - }, - "required": [ - "action", - "number" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "street_zoom" - }, - "street": { - "type": "string" - } - }, - "required": [ - "action", - "street" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "street_end" - }, - "categoryAny": { - "description": "Optional kind filter for the end places (\"is there any market at the end of this street?\").", - "items": { - "type": "string" - }, - "type": "array" - }, - "categoryNot": { - "items": { - "type": "string" - }, - "type": "array" - }, - "street": { - "description": "The street whose end places the user wants.", - "type": "string" - } - }, - "required": [ - "action", - "street" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "confirm" - }, - "value": { - "enum": [ - "yes", - "no" - ] - } - }, - "required": [ - "action", - "value" - ], - "type": "object" - }, - { - "properties": { - "action": { - "const": "select" - }, - "index": { - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "action", - "index" - ], - "type": "object" - } - ], - "type": "object" -} - changed
Input schema / properties / rangeM / descriptionPrevious value: -"Search radius around the anchor in meters (clamped to 50-1000)."New value: +"Search radius around the anchor in meters (clamped to 50-350)." - changed
Input schema / properties / rangeM / maximumPrevious value: -1000New value: +350 - removed
Input schema / properties / referencesRemoved value: -{ - "description": "Previously resolved places, most recent first, so \"it\" and \"that cafe\" resolve on later turns. Optional. Echo any lat/lng Kviria returned so distances stay real.", - "items": { - "properties": { - "gers": { - "maxLength": 128, - "minLength": 1, - "type": "string" - }, - "lat": { - "description": "Reference latitude as returned by Kviria.", - "type": "number" - }, - "lng": { - "description": "Reference longitude as returned by Kviria.", - "type": "number" - }, - "name": { - "maxLength": 512, - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "gers" - ], - "type": "object" - }, - "maxItems": 5, - "type": "array" -} - added
Input schema / properties / stateAdded value: +{ + "description": "The `state` field of the previous kviria response, copied character for character: that field only, never the whole response, and never shortened. Empty string on the first call.", + "maxLength": 2263, + "type": "string" +} - changed
Input schema / properties / transcript / descriptionPrevious value: -"The user's raw message (voice transcript or text), as spoken, typos and all. Do not normalize or paraphrase it. Mutually exclusive with `intent`."New value: +"The user's whole last turn, word for word: yes or no, corrections, hesitations and everything around the place included. Never shorten, rephrase, correct or complete it. If one turn arrived in pieces, join them in order." - changed
Input schema / properties / transcript / minLengthPrevious value: -2New value: +1 - changed
Input schema / requiredPrevious value: -[ - "anchor" -]New value: +[ + "transcript" +] - removed
Output schema / definitions / find_targetRemoved value: -{ - "description": "An entity lookup: ref (gers from a previous response), name (exactly as returned), or index (1-based into echoed candidates). Raw coordinates belong to the spatial actions.", - "oneOf": [ - { - "properties": { - "ref": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "properties": { - "name": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - { - "properties": { - "index": { - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "index" - ], - "type": "object" - } - ], - "type": "object" -} - added
Output schema / definitions / target / properties / acrossStreetAdded value: +{ + "description": "Set when the user named a street to be across, or when the place is on a corner and so has two acrosses: one answer per street, each naming the street it is across.", + "type": "string" +} - added
Output schema / definitions / target / properties / baseDistanceMAdded value: +{ + "description": "Set when the answer is relative to a place (near, across, next to): metres from that place. distanceM stays the distance from the user.", + "type": "number" +} - added
Output schema / definitions / target / properties / intersectionAdded value: +{ + "description": "Set when the target is a street corner: every street that meets there. Such a target has category and confidence null.", + "properties": { + "streets": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "streets" + ], + "type": "object" +} - changed
Output schema / definitions / target / properties / location / descriptionPrevious value: -"Named lat/lng fields; no coordinate-array ordering ambiguity."New value: +"Named lat/lng fields; no coordinate-array ordering ambiguity. Absent on one_unconfirmed: the coordinate comes with the user's yes." - changed
Output schema / definitions / target / requiredPrevious value: -[ - "gers", - "name", - "category", - "confidence", - "location", - "distanceM" -]New value: +[ + "gers", + "name", + "category", + "confidence", + "distanceM" +] - removed
Output schema / definitions / target_anchorRemoved value: -{ - "description": "The anchor to act on: ref (gers from a previous response), name (exactly as returned), index (1-based into echoed candidates), or at (raw coordinates). Never a free description.", - "oneOf": [ - { - "properties": { - "ref": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "ref" - ], - "type": "object" - }, - { - "properties": { - "name": { - "minLength": 1, - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - { - "properties": { - "at": { - "properties": { - "lat": { - "type": "number" - }, - "lng": { - "type": "number" - } - }, - "required": [ - "lat", - "lng" - ], - "type": "object" - } - }, - "required": [ - "at" - ], - "type": "object" - }, - { - "properties": { - "index": { - "minimum": 1, - "type": "integer" - } - }, - "required": [ - "index" - ], - "type": "object" - } - ], - "type": "object" -} - changed
Output schema / properties / candidates / descriptionPrevious value: -"The pending candidate set. Echo it back verbatim on the next turn."New value: +"The candidates to present on many. Never send them back: send state." - changed
Output schema / properties / category / descriptionPrevious value: -"The absent category on notFound decisions."New value: +"The category that was asked for and is absent, on a none decision." - changed
Output schema / properties / decision / descriptionPrevious value: -"The decision for this turn. An exact address resolves as \"resolved\" with the door facts riding target.address; several door clusters for one number come back as \"candidates\"."New value: +"The decision for this turn: how many answers there are and whether the single answer is certain, or not_a_place_request when the user's words are not about a place. An exact address is \"one\" with the door facts riding target.address; several door clusters for one number come back as \"many\"." - changed
Output schema / properties / decision / enumPrevious value: -[ - "resolved", - "confirm", - "candidates", - "notFound", - "clarify" -]New value: +[ + "one", + "one_unconfirmed", + "many", + "none", + "unclear", + "not_a_place_request" +] - changed
Output schema / properties / evidence / items / properties / reasonCode / descriptionPrevious value: -"Stable enum explaining the outcome (e.g. winner_confirmed, kind_below_noise_floor, user_confirmed, single_survivor, out_of_coverage). Read the code, never the free text."New value: +"Stable enum explaining the outcome (e.g. user_confirmed, single_survivor_pending, partial_name, out_of_coverage). Read the code, never the free text." - added
Output schema / properties / stateAdded value: +{ + "description": "The conversation state. Send it back unchanged as `state` on the next call.", + "type": "string" +} - changed
Output schema / properties / target / descriptionPrevious value: -"The resolved or pending target (on resolved, confirm, address)."New value: +"The settled target (one), or the target waiting for the user's yes or no (one_unconfirmed, without a location)." - changed
Output schema / requiredPrevious value: -[ - "decision" -]New value: +[ + "decision", + "evidence", + "state" +]
1 tool update
- First observed
kviria
Related MCP Connectors
Mobility, geocoding and nearby urban services for AI agents.
Geolocate Me turns your phone into location context for any AI assistant. Install the iOS or Android app, connect once with OAuth, and your GPS is queryable in natural language. Ask where you are, where you parked, where you were yesterday at 3pm, or how long you were at the office — the assistant calls the tool and answers with a real street address. https://geolocateme.app
Verified real-time places and events for AI agents. SF Bay Area live; more metros rolling out.
Routing, geocoding, places, matrix and map tools for location-aware AI workflows.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI agents to query any Earth location as a token-budgeted topological map with indoor floors, weather, traffic, transit schedules, and live delays.92,413 npmApache 2.0

ThinAir Geoofficial
AlicenseAqualityBmaintenanceLocation & routing intelligence for AI agents — geocoding, truck routing, traffic, weather, and place search.2199 npm1MIT
Magic Lane MCP Serverofficial
AlicenseBqualityCmaintenanceEnables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.85 npm7Apache 2.0- AlicenseAqualityDmaintenanceEnhances LLM capabilities with location-based services and geospatial data, enabling users to geocode addresses, find nearby points of interest, get directions, optimize meeting points, and analyze neighborhoods.12230MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.