Find places by what you want (work friendly, gluten free, great coffee), scored from real reviews.
Call this server's tools from your browser. Nothing to install.
Optional. Works without a key (small hourly quota per IP). A free key raises the quota: POST https://agentic-api.atly.com/v0/keys with your email. OAuth 2.1 sign-in is also supported.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Show my key, tier and remaining quota Who am I and how much quota is left. Works without a key too (then it describes the anonymous allowance for your IP).
This tool takes no arguments.
Show my key, tier and remaining quota Who am I and how much quota is left. Works without a key too (then it describes the anonymous allowance for your IP).
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Read the documentation Returns the API guide as Markdown: what each operation is for, how to turn a user's request into category ids and a location, request and response shapes, how to read scores. Call this once per session.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Everything about one place Full detail for a place id from `search_places`: profile, hours, all category scores, up to eight quotable statements, good-to-know facts, gluten-free identity when known, and the canonical Atly URL to cite.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 40,
"minLength": 3
}
},
"additionalProperties": false
}List supported areas Cities, neighborhoods and states Atly covers — densest in the United States, with pockets in Mexico, Israel and Thailand — each with an `id` you can pass to search, a center, a bounding box when known, and how many places it holds. Filter with `q` (substring of the name) and `level` (city, neighborhood, state). Results are ordered by place count.
| Argument | Type | Description |
|---|---|---|
| q | string | Area name or common abbreviation, e.g. "san diego", "midtown", "nyc". Exact and prefix matches rank first. |
| level | string | Restrict to one level. |
| limit | integer | Maximum areas to return, at most 200; a larger value returns 200. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 80,
"description": "Area name or common abbreviation, e.g. \"san diego\", \"midtown\", \"nyc\". Exact and prefix matches rank first."
},
"level": {
"enum": [
"city",
"neighborhood",
"state"
],
"type": "string",
"description": "Restrict to one level."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Maximum areas to return, at most 200; a larger value returns 200."
}
},
"additionalProperties": false
}List intent categories The intent taxonomy: cuisines, dishes, features ("Wifi", "Outdoor Seating"), vibes ("Cozy", "Lively"), occasions ("First Date", "Group Dinner"), diets ("Gluten Free", "Keto") and more. Map the user's words to category ids before searching. Filter with `q`, one concept per call — exact and prefix matches rank first, then substrings and keywords; plurals, hyphens and small typos are tolerated — or fetch once without `q` and cache the full list.
| Argument | Type | Description |
|---|---|---|
| q | string | Words to match against category names and keywords, e.g. "coffee", "dog friendly", "gluten-free". Ranked; tolerant of plurals and small typos. |
| limit | integer | Maximum categories to return, at most 2000; a larger value returns 2000. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 60,
"description": "Words to match against category names and keywords, e.g. \"coffee\", \"dog friendly\", \"gluten-free\". Ranked; tolerant of plurals and small typos."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Maximum categories to return, at most 2000; a larger value returns 2000."
}
},
"additionalProperties": false
}Find places for an intent near a location The core call. Give one or more category ids (from `list_categories`; all must match) and a location — either an `area_id` from `list_areas` or coordinates with a radius — and get places ranked by Atly's score for those categories, each with quotable reasons from real reviews, a link to cite, and freshness. Scores are 0–10 and relative to the area; a place with no score is unmeasured, not bad. If no place matches every category, trailing categories are dropped until something does (the first is never dropped), and `dropped_categories` says which. Ranking considers the strongest 100 candidates by Atly's base score. Scores are relative to other places in the same country.
| Argument | Type | Description |
|---|---|---|
| lat | number | |
| lon | number | |
| limit | integer | Places to return, at most 25; a larger value returns 25. |
| area_id | string | An id from `list_areas`; the search covers that area's viewport. A city name also works ("Austin", "Boise, ID"): it resolves to the matching area, or, for a city with no area, to the extent of the places whose address is in it; the response's `area` and doc_notes say what it resolved to. Give this or lat/lon, not both. |
| radius_km | number | Used with lat/lon. |
| categories* | array |
Tell us how a call went Reference the `call_id` of any earlier response and say whether it helped, and optionally why, in a sentence about the result — what was right, missing or wrong. Do not include the user's words, the conversation, or anything about the person. One row per caller per call; lightly rate-limited.
| Argument | Type | Description |
|---|---|---|
| notes | string | About the result only — never the conversation or the user. |
| call_id* | string | |
| outcome* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"call_id",
"outcome"
],
"properties": {
"notes": {
"type": "string",
"maxLength": 500,
"description": "About the result only — never the conversation or the user."
},
"call_id": {
"type": "string",
"maxLength": 36,
"minLength": 36
},
"outcome": {
"enum": [
"helpful",
"partly_helpful",
"not_helpful",
"wrong"
],
"type": "string"
}
},
"additionalProperties": false
}| Category ids, most important first. Every result matches all of them (after any relaxation). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"categories"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Places to return, at most 25; a larger value returns 25."
},
"area_id": {
"type": "string",
"maxLength": 120,
"description": "An id from `list_areas`; the search covers that area's viewport. A city name also works (\"Austin\", \"Boise, ID\"): it resolves to the matching area, or, for a city with no area, to the extent of the places whose address is in it; the response's `area` and doc_notes say what it resolved to. Give this or lat/lon, not both."
},
"radius_km": {
"type": "number",
"description": "Used with lat/lon."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"minItems": 1,
"description": "Category ids, most important first. Every result matches all of them (after any relaxation)."
}
},
"additionalProperties": false
}