AI List My Business
The AI List My Business server is an AI-callable business directory that enables AI assistants to search, discover, and retrieve ranked small-to-medium business (SMB) listings across multiple verticals and countries, returning UTM-tagged booking URLs so users can book directly with businesses.
Core capabilities:
Search businesses (
search_businesses): Find businesses (realtors, insurance agents, medical practitioners, dentists, home services, etc.) by category and location, with filtering by country, language, subcategory, minimum rating, and result count.Natural-language / fuzzy search (
search_by_query): Submit free-text queries like "evening dentist in Toronto that takes Sun Life" or "realtor in Dallas who speaks Spanish" without needing structured category inputs.Retrieve business profiles (
get_business_profile): Get detailed structured profiles by business ID, including services, hours, credentials/licenses, spoken languages, contact channels, and a UTM-tagged booking URL.Get booking options (
get_booking_options): Retrieve UTM-tagged booking URLs, accepted booking methods, hours of operation, timezone, and fallback contact info for direct booking on the SMB's own system.Discover categories (
get_categories): List available business verticals and subcategories, optionally filtered by country, so AI agents know what business types are searchable in a given region.
Key characteristics:
Results are ranked using a weighted relevance score (tier, distance, rating, vertical match, verified status, language match)
Zero customer PII — only public business data is cataloged
Multi-country support (US, CA, GB, AU, and more)
UTM attribution on all booking URLs enables SMB conversion tracking
Provides x402 metering for API tier usage, allowing pay-per-request billing for external API calls to the server.
Pulls public review data from Google Places API to enrich business profiles with aggregated ratings and review counts (Phase 2).
Generates embeddings for semantic search of business listings, enabling more accurate responses to natural language queries (Phase 2).
Provides geocoding of location strings to coordinates and calculates distances between businesses and user queries using Nominatim and Haversine formula.
Enables billing and payment processing for paid tiers of the MCP server, handling subscriptions and usage-based charges.
Serves as the database backend for storing business listings, categories, and related metadata, replacing mock data in Phase 2.
ailistmybusiness
MCP-callable directory for AI-driven SMB discovery. Country-agnostic, zero-PII catalog of realtors, insurance agents, and medical practitioners (Wave 1).
Working title. Public brand pending domain registration. Folder name and
package.jsonwill be renamed once the domain is locked.
What this is
When a user asks ChatGPT, Claude, or Gemini "find me a realtor in Dallas" / "evening walk-in clinic in Toronto" / "bilingual insurance broker", the AI calls this MCP server. It returns ranked business listings with UTM-tagged booking URLs. The user books directly with the SMB. We never see customer data — we are a business catalog, not a lead processor.
Related MCP server: discava – Business Directory for AI
Phase 1 status
MCP server scaffold (Node 20 + TypeScript)
5 tools:
search_businesses,get_business_profile,get_booking_options,search_by_query,get_categories30 mock SMBs across 3 verticals × 2 countries (Dallas + Toronto)
OpenStreetMap Nominatim geocoding (free, no PII)
UTM-tagged booking URLs for SMB attribution
Vitest test suite for all 5 tools
Smithery + Glama + Railway manifests
Supabase wiring (Phase 2)
Stripe billing for paid tiers (Phase 2)
Coinbase x402 metering for API tier (Phase 3)
Quick start
npm install
npm test # run unit tests
npm run test:mcp # smoke test all tools end-to-end
npm run dev # start MCP server on stdio
npm run http # start HTTP server on :3000 (preview endpoints + Railway entrypoint)Then visit http://localhost:3000/preview/search?category=realtor&location=Dallas to see the ranking output.
Architecture
src/
server.ts # MCP server (stdio transport, Smithery entrypoint)
http.ts # Express server (Railway entrypoint, /health, /preview/*)
types.ts # BusinessProfile, SearchHit, BookingOptions, etc.
tools/ # one file per MCP tool
searchBusinesses.ts
getBusinessProfile.ts
getBookingOptions.ts
searchByQuery.ts
getCategories.ts
lib/
db.ts # data access — switches on DATA_SOURCE env (mock | supabase)
ranking.ts # 6-factor weighted relevance score
utm.ts # UTM URL builder for booking links
geo.ts # OpenStreetMap Nominatim geocoder + Haversine distance
data/
mockBusinesses.json # 30 sample SMBs (realtors, insurance, medical × Dallas, Toronto)
categories.json # vertical taxonomy
scripts/
seed.ts # Supabase seeder (Phase 2 stub)
test-mcp.ts # smoke test runner
tests/
tools.test.ts # Vitest tests for all toolsZero-PII rule
This catalog stores business data only:
Business name, address, hours, services
Public credentials and license numbers
Aggregate review counts and ratings (sourced from public APIs in Phase 2)
UTM-tagged booking URLs
It explicitly does not store:
Customer / patient names, phones, emails, or any other identifiers
Insurance policy details, medical history, or anything covered by HIPAA / PIPEDA / GDPR
Individual booking records or appointment data
Booking flow: agent gets the SMB's booking URL → user clicks → user books on the SMB's own system. We see impressions; SMB sees conversions via UTM tags on their own analytics.
MCP tool contracts
search_businesses
{
category: string, // "realtor" | "insurance_agent" | "medical_practitioner" | etc.
location: string, // "Dallas, TX" — geocoded server-side
countryCode?: "US" | "CA" | "GB" | "AU" | ...,
language?: string, // ISO-639-1, e.g. "en", "fr", "es"
subcategory?: string,
maxResults?: number, // default 10, max 25
minRating?: number
}
→ SearchHit[]get_business_profile
{ id: string, agentName?: string }
→ BusinessProfile // bookingUrl is UTM-taggedget_booking_options
{ id: string, agentName?: string }
→ { bookingUrl, acceptedMethods, hours, timezone, fallbackContact }search_by_query
{ query: string, location?: string, countryCode?: string, maxResults?: number }
→ SearchHit[]Phase 1 implementation is keyword/substring-based. Phase 2 swaps in pgvector or OpenAI embeddings for true semantic search.
get_categories
{ countryCode?: string }
→ CategoryEntry[]Ranking logic
Weighted score (0–100) per business:
Tier (20%) — healthcare 100 / pro 85 / standard 65 / free 40
Distance (30%) — closer to query origin scores higher
Rating (20%) — public review rating × volume
Vertical / subcategory match (20%)
Verified listing (5%)
Language match (5%)
See src/lib/ranking.ts.
Hand-off to Claude Code
Once you clone this folder into your local dev directory:
# 1. Install
npm install
# 2. Initialize git
git init
git add .
git commit -m "Initial scaffold: MCP server + 5 tools + mock data"
git branch -M main
git remote add origin git@github.com:YOUR_GH_USERNAME/ailistmybusiness.git
git push -u origin main
# 3. Validate locally
npm run typecheck
npm test
npm run test:mcp
# 4. Submit to Smithery (when ready)
# https://smithery.ai/new — point to your GitHub repo
# 5. Deploy HTTP entrypoint to Railway (when ready)
# https://railway.app/new — uses railway.jsonPhase 2 plug-in points
When you're ready to wire real services:
Service | What to do | File to edit |
Supabase | Create tables |
|
Stripe | Add billing routes, wire |
|
Coinbase x402 | Wrap MCP tool handlers in metered facilitator |
|
AEO syndication | Push profiles to Google Business + schema.org markup on landing pages | new |
Real reviews | Pull from Google Places / OSM for Phase 2 listings | new |
License
MIT © 2026 SokoTech.
Available Tools
5 toolsget_booking_optionsA
Get UTM-tagged booking URL plus accepted methods and hours for a business. The user books directly with the SMB; we never see customer data.
Inputs: id (required), agentName.
get_business_profileA
Get full structured profile for a business by ID. Returns services, hours, credentials, languages, contact channels, and a UTM-tagged booking URL.
Inputs: id (required), agentName.
get_categoriesA
List available business verticals per country. Use to discover what kinds of businesses agents can search for in a given region.
Inputs: countryCode.
search_businessesB
Search businesses by category and location. Returns ranked hits with name, city, rating, and matchScore. Filters: countryCode, language, subcategory, minRating, maxResults.
Inputs: category (required), location (required), countryCode, language, +3 more.
search_by_queryA
Natural-language search across the catalog. Use for fuzzy queries like 'evening dentist that takes Sun Life' or 'realtor in Dallas who speaks Spanish'.
Inputs: query (required), location, countryCode, maxResults.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: get_booking_options returns booking URL and hours; get_business_profile returns full structured profile; get_categories lists business verticals; search_businesses performs structured search; search_by_query handles natural-language queries. No overlaps.
All tool names follow a consistent verb_noun pattern in snake_case: get_* for retrieval operations, search_* for searching. Predictable and clear.
5 tools is well-scoped for a business listing and search server. It covers the core functionalities of searching (two modes), retrieving profiles, booking options, and category discovery without being bloated.
The tool surface covers the main use cases: search by category/location, natural-language search, profile retrieval, booking info, and category listing. Minor gaps include lack of review details or contact info beyond what's in the profile, but overall it's complete for a read-only search and listing service.
Related MCP Connectors
Verified local businesses, bookable by AI agents: services, prices, availability and appointments.
Local business intel for AI agents: audits, lead scoring, tech stack, prospecting.
Local business leads and website intelligence for AI agents: lead lists, contacts, tracking, SEO and
Find local businesses, enrich them with emails and socials, and run lead pipelines from your AI.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceSearch for local businesses worldwide. Structured data optimized for AI agents. • Search Millions of businesses over 49 countries (Europe, Northamerica, Southamerica, Asia, Oceania) • Quality & demand scoring for every business • Ranking based on real user click-through data • No API key needed, free access • Rate limit: 500 requests/hour per IP-
- AlicenseAqualityCmaintenanceSearch for local businesses worldwide. Structured data optimized for AI agents. • Search Millions of businesses over 49 countries (Europe, Northamerica, Southamerica, Asia, Oceania) • Quality & demand scoring for every business • Ranking based on real user click-through data • No API key needed, free access • Rate limit: 500 requests/hour per IP61MIT
- AlicenseAqualityDmaintenanceUniversal search engine for AI agents. Discover products, services, and businesses across every category. 10 MCP tools, zero LLM calls, millisecond responses.114AGPL 3.0

@qasperai/mcp-serverofficial
AlicenseAqualityDmaintenanceEnables AI assistants to discover and book local service businesses like barbers, plumbers, and mechanics directly through MCP-compatible tools.973 npmMIT