CityBotMagic

US local businesses, services and source-cited prices, city by city. Free, no API key.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
91%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~816Tokens (tool definitions)
~978 BTypical response size
Moderate attention impact (0.64% of 128k context)

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-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools