mapbox-search-patterns — скилл для Claude Code: поиск и геокодинг
Подсказывает агенту, какой инструмент поиска Mapbox выбрать и какие параметры выставить для геокодинга, поиска POI и адресов.
npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a claude-codeЧто делает mapbox-search-patterns
Скилл разбирает три инструмента Mapbox и объясняет, когда каждый уместен. search_and_geocode_tool берёт конкретные названия, бренды и адреса: «Empire State Building», «McDonald's», «123 Main St, Boston, MA». category_search_tool — для общих категорий и множественного числа: «coffee shops», «hotels», «electric vehicle chargers». reverse_geocode_tool переводит координаты в адрес, город или почтовый индекс. Внутри есть таблица выбора инструмента: запрос слева, инструмент и причина справа.
Отдельный блок про пространственные фильтры. proximity смещает выдачу к точке, но не отсекает далёкие совпадения — его советуют ставить всегда, когда есть опорная локация, иначе результаты привяжутся к IP или пойдут по всему миру. bbox работает как жёсткая рамка: слишком маленькая даст пустой ответ, слишком большая — мусор. country ограничивает страной по коду ISO 3166 alpha-2, поэтому «Paris» с ["FR"] найдёт Париж во Франции, а не в Техасе. Фильтры можно комбинировать.
Для category_search_tool описан параметр limit от 1 до 25 со значением по умолчанию 10: меньше значений — быстрее ответ. У search_and_geocode_tool есть types для отсечения по типу объекта — poi, address, place, street, postcode, district, locality, country. Скилл пригодится, если вы пишете поиск по карте и не хотите каждый раз вспоминать, чем proximity отличается от bbox.
Какие задачи решает
- выбрать между поиском по названию и поиском по категории
- задать proximity, чтобы выдача шла от точки пользователя
- ограничить результаты рамкой bbox или страной
- подобрать limit под автокомплит или карту
- перевести координаты GPS в читаемый адрес
Примеры запросов агенту
- Найди кофейни рядом со мной через category_search_tool
- Что находится по координатам 37.7749, -122.4194?
- Найди отели в центре Сиэтла, ограничь bbox и поставь proximity
Как установить mapbox-search-patterns
1Через Skills CLI (Vercel)
npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a claude-code2Вручную: положить файлы
~/.claude/skills/mapbox-search-patterns/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/mapbox-search-patterns/
1Через Skills CLI (Vercel)
npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a codex2Вручную: положить файлы
.agents/skills/mapbox-search-patterns/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a cursor2Вручную: положить файлы
.cursor/skills/mapbox-search-patterns/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install mapbox/mapbox-agent-skills mapbox-search-patterns2Вручную: положить файлы
.github/skills/mapbox-search-patterns/SKILL.md1Через Skills CLI (Vercel)
npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a gemini-cli2Командой платформы
gemini skills install https://github.com/mapbox/mapbox-agent-skills --path skills/mapbox-search-patternsВручную: положить файлы
.devin/skills/mapbox-search-patterns/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора18
Похожие
Рядом в теме «Настройка агента: память, контекст, субагенты»
Все скиллы по теме «Настройка агента: память, контекст, субагенты» →Вопросы о mapbox-search-patterns
Как установить mapbox-search-patterns в Claude?
Выполните npx skills add mapbox/mapbox-agent-skills --skill mapbox-search-patterns -a claude-code. Скилл окажется в ~/.claude/skills/mapbox-search-patterns/SKILL.md.
Что делает mapbox-search-patterns?
Помогает агенту выбрать инструмент поиска Mapbox под конкретный запрос и выставить параметры: proximity, bbox, country, limit, types. Работает с геокодингом, поиском POI и адресов.
Чем proximity отличается от bbox?
proximity только смещает выдачу к точке и может вернуть далёкое, но релевантное совпадение. bbox — жёсткая граница: всё, что за ней, в ответ не попадёт.
Исходный текст
SKILL.md · MIT
---
name: mapbox-search-patterns
description: Expert guidance on choosing the right Mapbox search tool and parameters for geocoding, POI search, and location discovery
---
# Mapbox Search Patterns Skill
Expert guidance for AI assistants on using Mapbox search tools effectively. Covers tool selection, parameter optimization, and best practices for geocoding, POI search, and location discovery.
## Available Search Tools
### 1. search_and_geocode_tool
**Best for:** Specific places, addresses, brands, named locations
**Use when query contains:**
- Specific names: "Starbucks on 5th Avenue", "Empire State Building"
- Brand names: "McDonald's", "Whole Foods"
- Addresses: "123 Main Street, Seattle", "1 Times Square"
- Chain stores: "Target"
- Cities/places: "San Francisco", "Portland"
**Don't use for:** Generic categories ("coffee shops", "museums")
### 2. category_search_tool
**Best for:** Generic place types, categories, plural queries
**Use when query contains:**
- Generic types: "coffee shops", "restaurants", "gas stations"
- Plural forms: "museums", "hotels", "parks"
- Is-a phrases: "any coffee shop", "all restaurants", "nearby pharmacies"
- Industry terms: "electric vehicle chargers", "ATMs"
**Don't use for:** Specific names or brands
### 3. reverse_geocode_tool
**Best for:** Converting coordinates to addresses, cities, towns, postcodes
**Use when:**
- Have GPS coordinates, need human-readable address
- Need to identify what's at a specific location
- Converting user location to address
## Tool Selection Decision Matrix
| User Query | Tool | Reasoning |
| ------------------------------- | ----------------------- | ------------------------ |
| "Find Starbucks on Main Street" | search_and_geocode_tool | Specific brand name |
| "Find coffee shops nearby" | category_search_tool | Generic category, plural |
| "What's at 37.7749, -122.4194?" | reverse_geocode_tool | Coordinates to address |
| "Empire State Building" | search_and_geocode_tool | Specific named POI |
| "hotels in downtown Seattle" | category_search_tool | Generic type + location |
| "Target store locations" | search_and_geocode_tool | Brand name (even plural) |
| "any restaurant near me" | category_search_tool | Generic + "any" phrase |
| "123 Main St, Boston, MA" | search_and_geocode_tool | Specific address |
| "electric vehicle chargers" | category_search_tool | Industry category |
| "McDonald's" | search_and_geocode_tool | Brand name |
## Parameter Guidance
### Proximity vs Bbox vs Country
**Three ways to spatially constrain search results:**
#### 1. proximity (STRONGLY RECOMMENDED)
**What it does:** Biases results toward a location, but doesn't exclude distant matches
**Use when:**
- User says "near me", "nearby", "close to"
- Have a reference point but want some flexibility
- Want results sorted by relevance to a point
**Example:**
```json
{
"q": "pizza",
"proximity": {
"longitude": -122.4194,
"latitude": 37.7749
}
}
```
**Why this works:** API returns SF pizza places first, but might include famous NYC pizzerias if highly relevant
**Critical:** Always set proximity when you have a reference location! Without it, results are IP-based or global.
#### 2. bbox (Bounding Box)
**What it does:** Hard constraint - ONLY returns results within the box
**Use when:**
- User specifies an area: "in downtown", "within this neighborhood"
- Have a defined service area
- Need to guarantee results are within bounds
**Example:**
```json
{
"q": "hotel",
"bbox": [-122.51, 37.7, -122.35, 37.83] // [minLon, minLat, maxLon, maxLat]
}
```
**Why this works:** Guarantees all hotels are within SF's downtown area
**Watch out:** Too small = no results; too large = irrelevant results
#### 3. country
**What it does:** Limits results to specific countries
**Use when:**
- User specifies country: "restaurants in France"
- Building country-specific features
- Need to respect regional boundaries
- Or it is otherwise clear they want results within a specific country
**Example:**
```json
{
"q": "Paris",
"country": ["FR"] // ISO 3166 alpha-2 codes
}
```
**Why this works:** Finds Paris, France (not Paris, Texas)
**Can combine:** `proximity` + `country` + `bbox` or any combination of the three
### Decision Matrix: Spatial Filters
| Scenario | Use | Why |
| ---------------------------------- | ----------------------------------- | --------------------------------- |
| "Find coffee near me" | proximity | Bias toward user location |
| "Coffee shops in downtown Seattle" | proximity + bbox | Center on downtown, limit to area |
| "Hotels in France" | country | Hard country boundary |
| "Best pizza in San Francisco" | proximity + country ["US"] | Bias to SF, limit to US |
| "Gas stations along this route" | bbox around route | Hard constraint to route corridor |
| "Restaurants within 5 miles" | proximity (then filter by distance) | Bias nearby, filter results |
### Setting limit Parameter
**category_search_tool only** (1-25, default 10)
| Use Case | Limit | Reasoning |
| --------------------- | ----- | ----------------------- |
| Quick suggestions | 5 | Fast, focused results |
| Standard list | 10 | Default, good balance |
| Comprehensive search | 25 | Maximum allowed |
| Map visualization | 25 | Show all nearby options |
| Dropdown/autocomplete | 5 | Don't overwhelm UI |
**Performance tip:** Lower limits = faster responses
### types Parameter (search_and_geocode_tool)
**Filter by feature type:**
| Type | What It Includes | Use When |
| ---------- | ------------------------------------------ | --------------------------------- |
| `poi` | Points of interest (businesses, landmarks) | Looking for POIs, not addresses |
| `address` | Street addresses | Need specific address |
| `place` | Cities, neighborhoods, regions | Looking for area/region |
| `street` | Street names without numbers | Need street, not specific address |
| `postcode` | Postal codes | Searching by ZIP/postal code |
| `district` | Districts, neighborhoods | Area-based search |
| `locality` | Towns, villages | Municipality search |
| `country` | Country names | Country-level search |
**Example combinations:**
```json
// Only POIs and addresses, no cities
{"q": "Paris", "types": ["poi", "address"]}
// Returns Paris Hotel, Paris Street, not Paris, France
// Only places (cities)
{"q": "Paris", "types": ["place"]}
// Returns Paris, France; Paris, Texas; etc.
```
**Default behavior:** All types included (usually what you want)
### auto_complete Parameter (search_and_geocode_tool)
**What it does:** Enables partial/fuzzy matching
| Setting | Behavior | Use When |
| ----------------- | ---------------------------- | ----------------------------- |
| `true` | Matches partial words, typos | User typing in real-time |
| `false` (default) | Exact matching | Final query, not autocomplete |
**Example:**
<!-- cspell:disable -->
```json
// User types "starb"
{ "q": "starb", "auto_complete": true }
// Returns: Starbucks, Starboard Tavern, etc.
```
**Use for:**
- Search-as-you-type interfaces
- Handling typos ("mcdonalds" -> McDonald's)
<!-- cspell:enable -->
- Incomplete queries
**Don't use for:**
- Final/submitted queries (less precise)
- When you need exact matches
## Anti-Patterns to Avoid
### Don't: Use category_search for brands
```javascript
// BAD
category_search_tool({ category: 'starbucks' });
// "starbucks" is not a category, returns error
// GOOD
search_and_geocode_tool({ q: 'Starbucks' });
```
### Don't: Use search_and_geocode for generic categories
```javascript
// BAD
search_and_geocode_tool({ q: 'coffee shops' });
// Less precise, may return unrelated results
// GOOD
category_search_tool({ category: 'coffee_shop' });
```
### Don't: Forget proximity for local searches
```javascript
// BAD - Results may be anywhere globally
category_search_tool({ category: 'restaurant' });
// GOOD - Biased to user location
category_search_tool({
category: 'restaurant',
proximity: { longitude: -122.4194, latitude: 37.7749 }
});
```
### Don't: Geocode ambiguous place names without proximity (REST too)
This applies to Mapbox Geocoding API v5 / Search Box in browser apps — not only MCP tools.
```javascript
// BAD — limit=1 without proximity can resolve "Lincoln Memorial" to Illinois
fetch(`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(q)}.json?access_token=${token}&limit=1`);
// GOOD — bias to map center (and optional bbox)
fetch(
`https://api.mapbox.com/geocoding/v5/mapbox.places/${encodeURIComponent(q)}.json` +
`?access_token=${token}&proximity=-77.0369,38.9072&bbox=-77.15,38.79,-76.90,38.99&limit=1`
);
```
Also debounce search inputs (`clearTimeout` + `setTimeout`) so every keystroke does not fire a geocode.
### Don't: Use bbox when you mean proximity
```javascript
// BAD - Hard boundary may exclude good nearby results
search_and_geocode_tool({
q: 'pizza',
bbox: [-122.42, 37.77, -122.41, 37.78] // Tiny box
});
// GOOD - Bias toward point, but flexible
search_and_geocode_tool({
q: 'pizza',
proximity: { longitude: -122.4194, latitude: 37.7749 }
});
```
### Don't: Request ETA unnecessarily
```javascript
// BAD - Costs API quota for routing calculations
search_and_geocode_tool({
q: 'museums',
eta_type: 'navigation',
navigation_profile: 'driving'
});
// User didn't ask for travel time!
// GOOD - Only add ETA when needed
search_and_geocode_tool({ q: 'museums' });
// If user asks "how long to get there?", then add ETA
```
### Don't: Set limit too high for UI display
```javascript
// BAD - Overwhelming for simple dropdown
category_search_tool({
category: 'restaurant',
limit: 25
});
// Returns 25 restaurants for a 5-item dropdown
// GOOD - Match UI needs
category_search_tool({
category: 'restaurant',
limit: 5
});
```
## Quick Reference
### Tool Selection Flowchart
```
User query contains...
-> Specific name/brand (Starbucks, Empire State Building)
-> search_and_geocode_tool
-> Generic category/plural (coffee shops, museums, any restaurant)
-> category_search_tool
-> Coordinates -> Address
-> reverse_geocode_tool
-> Address -> Coordinates
-> search_and_geocode_tool with types: ["address"]
```
### Essential Parameters Checklist
**For local searches, ALWAYS set:**
- `proximity` (or bbox if strict boundary needed)
**For category searches, consider:**
- `limit` (match UI needs)
- `format` (json_string if plotting on map)
**For disambiguation, use:**
- `country` (when geographic context matters)
- `types` (when feature type matters)
**For travel-time ranking:**
- `eta_type`, `navigation_profile`, `origin` (costs API quota)
## Common Mistakes
1. **Forgetting proximity** -> Results are global/IP-based (or wrong state for ambiguous memorial/park names)
2. **Using wrong tool** -> category_search for "Starbucks" (use search_and_geocode)
3. **Invalid category** -> Check category_list first
4. **Bbox too small** -> No results; use proximity instead
5. **Requesting ETA unnecessarily** -> Adds API cost
6. **Limit too high for UI** -> Overwhelming user
7. **Not filtering types** -> Get cities when you want POIs
8. **No debounce on typeahead** -> Quota burn and racy UI
## Reference Files
Load these for deeper guidance on specific topics:
- **`references/advanced-params.md`** — poi_category, ETA, format, and language parameters
- **`references/workflows.md`** — Common patterns: Near Me, Branded, Geocoding, Category+Area, Reverse, Route-Based, Multilingual
- **`references/optimization-combining.md`** — Performance optimization, combining tools, handling no results, category list resource
© mapbox · MIT · mapbox/mapbox-agent-skills