Atly
Find places by what you want (work friendly, gluten free, great coffee), scored from real reviews.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"places": {
"url": "https://agentic-api.atly.com/mcp"
}
}
}원격 엔드포인트
https://agentic-api.atly.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (7)
🟢get_api_key
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).
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"key_id": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"tier": {
"anyOf": [
{
"type": "string",
"enum": [
"anonymous",
"unverified",
"verified"
]
},
{
"type": "null"
}
]
},
"email_verified": {
"type": [
"boolean",
"null"
]
},
"quota": {
"anyOf": [
{
"type": "object",
"properties": {
"limit": {
"anyOf": [
{
"type": "integer",
"description": "Calls allowed per window."
},
{
"type": "null"
}
],
"description": "Calls allowed per window."
},
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"window": {
"anyOf": [
{
"type": "string",
"enum": [
"hour",
"day"
]
},
{
"type": "null"
}
]
},
"resets_at": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"doc_notes": {
"type": [
"string",
"null"
]
},
"call_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_places(categories, area_id, lat, lon, radius_km, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"categories": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 5,
"description": "Category ids, most important first. Every result matches all of them (after any relaxation)."
},
"area_id": {
"type": "string",
"description": "An id from `list_areas`; the search covers that area's viewport. Give this or lat/lon, not both."
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"radius_km": {
"type": "number",
"description": "Used with lat/lon."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
}
},
"required": [
"categories"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"places": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"string",
"null"
]
},
"lat": {
"type": [
"number",
"null"
]
},
"lon": {
"type": [
"number",
"null"
]
},
"distance_km": {
"type": [
"number",
"null"
],
"description": "From the search center."
},
"score": {
"type": [
"number",
"null"
],
"description": "Atly score 0–10 — for the requested categories in search"
},
"category_scores": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"category_id": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"score": {
"type": [
"number",
"null"
]
},
"reviews": {
"anyOf": [
{
"type": "integer",
"description": "Reviews that mention this category."
},
{
"type": "null"
}
],
"description": "Reviews that mention this category."
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"reasons": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": [
"string",
"null"
]
},
"kind": {
"type": [
"string",
"null"
]
},
"sentiment": {
"anyOf": [
{
"type": "string",
"enum": [
"positive",
"neutral",
"negative"
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Short first-person statements from real reviews, most useful first. Quote them."
},
{
"type": "null"
}
],
"description": "Short first-person statements from real reviews, most useful first. Quote them."
},
"blurb": {
"type": [
"string",
"null"
],
"description": "One-line editorial summary."
},
"place_type": {
"type": [
"string",
"null"
]
},
"review_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"google_rating": {
"type": [
"number",
"null"
]
},
"price": {
"type": [
"string",
"null"
]
},
"gluten_free": {
"anyOf": [
{
"type": "object",
"properties": {
"safety": {
"anyOf": [
{
"type": "string",
"enum": [
"100% dedicated gluten-free",
"celiac friendly (low risk of cross-contamination)",
"accommodating (some risk of cross-contamination)",
"discuss cross-contamination with staff"
]
},
{
"type": "null"
}
]
},
"dedicated_kitchen": {
"type": [
"string",
"null"
]
},
"trained_staff": {
"type": [
"string",
"null"
]
},
"dedicated_fryer": {
"type": [
"string",
"null"
]
},
"menu": {
"type": [
"string",
"null"
]
},
"verified_by_atly": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false,
"description": "Present only for places with a gluten-free identity."
},
{
"type": "null"
}
],
"description": "Present only for places with a gluten-free identity."
},
"url": {
"type": [
"string",
"null"
],
"description": "Canonical Atly page. Link it when you cite."
},
"last_updated": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"total_matched": {
"anyOf": [
{
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"description": "How many places match in this area, capped (\"1000+\"). Absent when counting timed out."
},
{
"type": "null"
}
],
"description": "How many places match in this area, capped (\"1000+\"). Absent when counting timed out."
},
"dropped_categories": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"description": "Category ids dropped to avoid an empty result."
},
{
"type": "null"
}
],
"description": "Category ids dropped to avoid an empty result."
},
"area": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": true,
"description": "The resolved search geometry — an area (id, name, level, center, bbox) or a circle (center, radius_km)."
},
{
"type": "null"
}
],
"description": "The resolved search geometry — an area (id, name, level, center, bbox) or a circle (center, radius_km)."
},
"doc_notes": {
"type": [
"string",
"null"
]
},
"call_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_place(id)
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.
입력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 3,
"maxLength": 40
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"place": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"string",
"null"
]
},
"lat": {
"type": [
"number",
"null"
]
},
"lon": {
"type": [
"number",
"null"
]
},
"distance_km": {
"type": [
"number",
"null"
],
"description": "From the search center."
},
"score": {
"type": [
"number",
"null"
],
"description": "Atly score 0–10 — for the requested categories in search"
},
"category_scores": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"category_id": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"score": {
"type": [
"number",
"null"
]
},
"reviews": {
"anyOf": [
{
"type": "integer",
"description": "Reviews that mention this category."
},
{
"type": "null"
}
],
"description": "Reviews that mention this category."
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"reasons": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": [
"string",
"null"
]
},
"kind": {
"type": [
"string",
"null"
]
},
"sentiment": {
"anyOf": [
{
"type": "string",
"enum": [
"positive",
"neutral",
"negative"
]
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Short first-person statements from real reviews, most useful first. Quote them."
},
{
"type": "null"
}
],
"description": "Short first-person statements from real reviews, most useful first. Quote them."
},
"blurb": {
"type": [
"string",
"null"
],
"description": "One-line editorial summary."
},
"place_type": {
"type": [
"string",
"null"
]
},
"review_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"google_rating": {
"type": [
"number",
"null"
]
},
"price": {
"type": [
"string",
"null"
]
},
"gluten_free": {
"anyOf": [
{
"type": "object",
"properties": {
"safety": {
"anyOf": [
{
"type": "string",
"enum": [
"100% dedicated gluten-free",
"celiac friendly (low risk of cross-contamination)",
"accommodating (some risk of cross-contamination)",
"discuss cross-contamination with staff"
]
},
{
"type": "null"
}
]
},
"dedicated_kitchen": {
"type": [
"string",
"null"
]
},
"trained_staff": {
"type": [
"string",
"null"
]
},
"dedicated_fryer": {
"type": [
"string",
"null"
]
},
"menu": {
"type": [
"string",
"null"
]
},
"verified_by_atly": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false,
"description": "Present only for places with a gluten-free identity."
},
{
"type": "null"
}
],
"description": "Present only for places with a gluten-free identity."
},
"url": {
"type": [
"string",
"null"
],
"description": "Canonical Atly page. Link it when you cite."
},
"last_updated": {
"type": [
"string",
"null"
]
},
"phone": {
"type": [
"string",
"null"
]
},
"website": {
"type": [
"string",
"null"
]
},
"menu_url": {
"type": [
"string",
"null"
]
},
"reservation_url": {
"type": [
"string",
"null"
]
},
"hours": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"description": "Weekly opening periods as reported by Google, when known."
},
{
"type": "null"
}
],
"description": "Weekly opening periods as reported by Google, when known."
},
"timezone": {
"type": [
"string",
"null"
]
},
"good_to_know": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"business_status": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"doc_notes": {
"type": [
"string",
"null"
]
},
"call_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡submit_feedback(call_id, outcome, notes)
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.
입력 스키마
{
"type": "object",
"properties": {
"call_id": {
"type": "string",
"minLength": 36,
"maxLength": 36
},
"outcome": {
"type": "string",
"enum": [
"helpful",
"partly_helpful",
"not_helpful",
"wrong"
]
},
"notes": {
"type": "string",
"maxLength": 500,
"description": "About the result only — never the conversation or the user."
}
},
"required": [
"call_id",
"outcome"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"recorded": {
"type": [
"boolean",
"null"
]
},
"doc_notes": {
"type": [
"string",
"null"
]
},
"call_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_docs
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.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_categories(q, limit)
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.
입력 스키마
{
"type": "object",
"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,
"maximum": 2000,
"description": "Maximum categories to return."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"categories": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"emoji": {
"type": [
"string",
"null"
]
},
"match": {
"type": [
"string",
"null"
],
"description": "How the query matched this category — exact"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"doc_notes": {
"type": [
"string",
"null"
]
},
"call_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_areas(q, level, limit)
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.
입력 스키마
{
"type": "object",
"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": {
"type": "string",
"enum": [
"city",
"neighborhood",
"state"
],
"description": "Restrict to one level."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}출력 스키마
{
"type": "object",
"properties": {
"areas": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"level": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
],
"description": "State for US cities and neighborhoods; the equivalent district or province elsewhere."
},
"parent": {
"type": [
"string",
"null"
],
"description": "City for neighborhoods."
},
"country": {
"type": [
"string",
"null"
],
"description": "Country the area is in. Coverage is densest in the United States"
},
"place_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"bbox": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
},
"description": "[west, south, east, north]"
},
{
"type": "null"
}
],
"description": "[west, south, east, north]"
},
"center": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
},
"description": "[lon, lat]"
},
{
"type": "null"
}
],
"description": "[lon, lat]"
}
},
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"doc_notes": {
"type": [
"string",
"null"
]
},
"call_id": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}커뮤니티
증거