From brave-search-skills
Fetches AI-generated markdown descriptions for up to 20 POIs via Brave Search API. Requires POI IDs from prior web-search with result_filter=locations.
npx claudepluginhub brave/brave-search-skills --plugin brave-search-skillsThis skill uses the workspace's default tool permissions.
> **Requires API Key**: Get one at https://api.search.brave.com
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides slash command development for Claude Code: structure, YAML frontmatter, dynamic arguments, bash execution, user interactions, organization, and best practices.
Requires API Key: Get one at https://api.search.brave.com
Plan: Included in the Search plan. See https://api-dashboard.search.brave.com/app/subscriptions/subscribe
Two-step flow: This endpoint requires POI IDs from a prior web search.
- Call
web-searchwithresult_filter=locationsto get POI IDs fromlocations.results[].id- Pass those IDs to this endpoint to get AI-generated descriptions
curl -s "https://api.search.brave.com/res/v1/local/descriptions?ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA%3D" \
-H "Accept: application/json" \
-H "Accept-Encoding: gzip" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
curl -s "https://api.search.brave.com/res/v1/local/descriptions" \
-H "Accept: application/json" \
-H "Accept-Encoding: gzip" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-G \
--data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
--data-urlencode "ids=loc4HTAVTJKP4RBEBZCEMBI3NG26YD4II4PATIHPDYI="
Note: POI IDs are opaque strings returned in web search locations.results[].id. They are valid for approximately 8 hours. The example IDs above are for illustration — fetch fresh IDs via web-search with result_filter=locations.
GET https://api.search.brave.com/res/v1/local/descriptions
Authentication: X-Subscription-Token: <API_KEY> header
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ids | string[] | Yes | — | POI IDs from web search locations.results[].id (1-20, repeated: ?ids=a&ids=b) |
| Field | Type | Description |
|---|---|---|
type | string | Always "local_descriptions" |
results | array | List of description objects (entries may be null) |
results[].type | string | Always "local_description" |
results[].id | string | POI identifier matching the request |
results[].description | string? | AI-generated markdown description, or null if unavailable |
{
"type": "local_descriptions",
"results": [
{
"type": "local_description",
"id": "loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=",
"description": "### Overview\nA cozy neighborhood cafe known for its **artisanal coffee**..."
}
]
}
POI IDs come from the Web Search API (web-search) with result_filter=locations:
# 1. Search for local businesses
curl -s "https://api.search.brave.com/res/v1/web/search?q=restaurants+san+francisco&result_filter=locations" \
-H "Accept: application/json" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
# 2. Extract POI IDs from locations.results[].id
# 3. Use those IDs with local/pois and local/descriptions
local-pois to get both structured data (hours, ratings) and narrative descriptions### headings, bullet lists, bold/italics — always formatted as markdowndescription may be null