CityBotMagic
US local businesses, services and source-cited prices, city by city. Free, no API key.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"local-business-data": {
"url": "https://citybotmagic.com/mcp"
}
}
}Remote endpoints
https://citybotmagic.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢list_cities(state)
Lists the US cities and towns CityBotMagic covers, with business counts. Call this first if unsure whether a city is covered.
Input Schema
{
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "Optional two-letter state code filter"
}
}
}🟢search_businesses(city, state, query, category, has_prices, ...)
Finds local businesses in a city by keyword (name, category, service, product) and/or category. Returns contact details, hours availability and how many published prices each has.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City or town name, e.g. \"Yerington\""
},
"state": {
"type": "string",
"description": "Two-letter state code, e.g. \"NV\""
},
"query": {
"type": "string",
"description": "What the user needs, e.g. \"oil change\", \"pizza\", \"plumber\", \"haircut\""
},
"category": {
"type": "string",
"description": "Optional category or group keyword, e.g. \"restaurant\", \"health_care\""
},
"has_prices": {
"type": "boolean",
"description": "Only businesses with published prices"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20
}
},
"required": [
"city",
"state"
]
}🟢get_business(id, city, state, slug)
Full record for one business: address, phone, website, hours, services, prices with sources. Pass the id from search results, or city + state + slug.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"city": {
"type": "string",
"description": "City or town name, e.g. \"Yerington\""
},
"state": {
"type": "string",
"description": "Two-letter state code, e.g. \"NV\""
},
"slug": {
"type": "string"
}
}
}🟢find_prices(city, state, query, limit)
Searches published prices for a product or service across a city's businesses, e.g. "haircut", "oil change", "bowling". Each price includes its source URL and the date it was read.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City or town name, e.g. \"Yerington\""
},
"state": {
"type": "string",
"description": "Two-letter state code, e.g. \"NV\""
},
"query": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
}
},
"required": [
"city",
"state",
"query"
]
}🟢price_summary(city, state, service)
What a common local service typically costs in a city: median, middle-half range, low and high, and every business's lowest published price with its source URL and read date. Services: oil-change, brake-service, wheel-alignment, tire-rotation, smog-check, car-detailing, car-wash, ac-tune-up, drain-cleaning, dog-grooming, haircut, manicure, pedicure, massage, teeth-whitening, tattoo-minimum, tattoo-hourly. Omit service to get all of them for the city. For anything else use find_prices.
Input Schema
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City or town name, e.g. \"Yerington\""
},
"state": {
"type": "string",
"description": "Two-letter state code, e.g. \"NV\""
},
"service": {
"type": "string",
"description": "A service slug or name, e.g. \"oil-change\", \"haircut\", \"dog grooming\". Omit for every service."
}
},
"required": [
"city",
"state"
]
}Community
Evidence