loading…
Search for a command to run...
loading…
Country-agnostic MCP-callable directory for AI agents to find local SMBs — realtors, insurance agents, medical practitioners — by category, location, or natural
Country-agnostic MCP-callable directory for AI agents to find local SMBs — realtors, insurance agents, medical practitioners — by category, location, or natural-language query. Returns business catalog data and UTM-tagged booking URLs (zero PII).
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.
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.
search_businesses, get_business_profile, get_booking_options, search_by_query, get_categoriesnpm 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.
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 tools
This catalog stores business data only:
It explicitly does not store:
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.
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-tagged
get_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[]
Weighted score (0–100) per business:
See src/lib/ranking.ts.
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 [email protected]: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.json
When you're ready to wire real services:
| Service | What to do | File to edit |
|---|---|---|
| Supabase | Create tables businesses + categories, set SUPABASE_* env vars, set DATA_SOURCE=supabase, run npm run seed |
src/lib/db.ts |
| Stripe | Add billing routes, wire POST /webhooks/stripe, gate paid-tier features in ranking |
src/http.ts, new src/billing/ |
| Coinbase x402 | Wrap MCP tool handlers in metered facilitator | src/server.ts, new src/lib/x402.ts |
| AEO syndication | Push profiles to Google Business + schema.org markup on landing pages | new src/syndication/ |
| Real reviews | Pull from Google Places / OSM for Phase 2 listings | new src/lib/reviews.ts |
MIT © 2026 SokoTech.
Run in your terminal:
claude mcp add ai-list-my-business -- npx Yes, AI List My Business MCP is free — one-click install via Unyly at no cost.
No, AI List My Business runs without API keys or environment variables.
Self-hosted: the server runs locally on your machine via the install command above.
Open AI List My Business on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Security
Low riskAutomated heuristic from public metadata — not a security guarantee.