Plexa
Agentic discovery layer for local businesses in Mexico & LATAM
Install
Install and configure the MCP from https://joinplexa.com/docs now. Follow the documentation's installation instructions, ask me for anything you can't complete yourself, and verify its tools load.New to Plexa? Read what Plexa is first, then start below.
Quickstart
1.Create a free account
Sign up at joinplexa.com/register (email link or Google). Signing in issues your account access token — that's the <your-account-token> used to mint an API key in the next step. Need a hand? hola@joinplexa.com.
2.Mint an API key (free)
curl -X POST https://api.joinplexa.com/v1/builders/register \
-H "Authorization: Bearer <your-account-token>" \
-H "Content-Type: application/json" \
-d '{"name": "my-agent"}'
Returns a permanent plx_live_… key — shown once, so store it:
{
"api_key": "plx_live_9f3c...e21a",
"name": "my-agent",
"tier": "free",
"credits_limit": 5000,
"rate_limit_per_min": 60
}
3.Search businesses
curl "https://api.joinplexa.com/v1/search?vertical=dental&city=Tijuana&limit=20" \
-H "Authorization: Bearer plx_live_..."
4.Or connect via MCP — one command
claude mcp add --transport http plexa https://api.joinplexa.com/mcp/
SSE transport (legacy clients):
claude mcp add --transport sse plexa https://api.joinplexa.com/mcp/sse
Or add manually to your MCP config:
{
"mcpServers": {
"plexa": {
"type": "http",
"url": "https://api.joinplexa.com/mcp/"
}
}
}
5.Or install the skill (a Plexa router for your agent)
npx skills add incrematica/plexa-mcp
Installs the use-plexa skill: when to reach for Plexa, the 7 tools, and the search → get_business → contact pattern.
Endpoints
Base URL: https://api.joinplexa.com
GET/v1/searchSearch businesses by vertical, city, and geo
GET/v1/businesses/{slug}Business detail by slug
GET/v1/businesses/{id}/queriesAgent activity feed — requires auth
GET/v1/verticalsList all available verticals
GET/v1/stats/publicPlatform stats (no auth)
POST/v1/builders/registerRegister an agent and get an API key
GET /v1/search — query parameters
ParamTypeDefaultDescription
qstring—Free-text query over name and description
verticalstring—Vertical slug (dental, restaurant, medical…)
citystring—City name
statestring—State / province
countrystringallISO country code (MX, CO, AR…). Omit to search every country in the registry.
lat, lngfloat—Geo center; combine with radius_km
radius_kmfloat15Search radius from lat/lng, in km
langstring—Language filter (es, en)
capabilitiesstring—Comma-separated capability names
min_trust_scoreint0Minimum trust score (0–100)
claimedbool—Only claimed (true) or unclaimed (false)
limitint20Results per page (1–100)
offsetint0Pagination offset
Example — search
curl "https://api.joinplexa.com/v1/search?vertical=dental&city=Tijuana&limit=20" \
-H "Authorization: Bearer plx_live_..."
{
"results": [
{
"id": "b1a2c3d4-5e6f-7890-abcd-ef1234567890",
"slug": "clinica-dental-norte-tijuana",
"name": "Clínica Dental Norte",
"vertical": "dental",
"city": "Tijuana",
"state": "B.C.",
"country": "MX",
"description_short": "Dentist en Tijuana, B.C.",
"phone_e164": "+525500000000",
"languages": ["es"],
"capabilities": [
{
"name": "book_appointment",
"label": "Agendar cita",
"action_type": "whatsapp",
"action_url": "https://wa.me/525500000000?text=Hola...",
"description": "Envía WhatsApp para agendar cita"
}
],
"trust_score": 8,
"claimed": false,
"tier": "free",
"aggregate_rating_human": null,
"review_count_human": 0,
"specialties": [],
"distance_km": null
}
],
"total": 42,
"limit": 20,
"offset": 0,
"filters_applied": { "vertical": "dental", "city": "Tijuana", "country": "MX" }
}
Example — business detail
curl "https://api.joinplexa.com/v1/businesses/clinica-dental-norte-tijuana" \
-H "Authorization: Bearer plx_live_..."
{
"slug": "clinica-dental-norte-tijuana",
"name": "Clínica Dental Norte",
"vertical": "dental",
"city": "Tijuana",
"state": "B.C.",
"country": "MX",
"phone_e164": "+525500000000",
"website": "https://example.com",
"languages": ["es"],
"opening_hours": [
{ "days": ["Monday","Tuesday","Wednesday","Thursday","Friday"], "opens": "09:00", "closes": "19:00" },
{ "days": ["Saturday"], "opens": "09:00", "closes": "14:00" }
],
"services": [
{ "name": "Limpieza dental", "price_amount": 600, "price_currency": "MXN", "duration_minutes": 45 }
],
"faqs": [
{ "question": "¿Atienden urgencias?", "answer": "Sí, con cita el mismo día." }
],
"capabilities": [
{ "name": "book_appointment", "action_type": "whatsapp", "action_url": "https://wa.me/525500000000?text=Hola..." }
],
"trust_score": 8,
"tier": "free",
"claimed": false,
"profile_completeness": 62
}
MCP Tools
Connect Plexa as an MCP server and call tools directly from any agent.
claude mcp add --transport http plexa https://api.joinplexa.com/mcp/
Or give your agent the router skill:
npx skills add incrematica/plexa-mcp
MCPRESTllms.txtschema.org
search_businessesSearch by vertical, city, radius, and capabilities
get_businessFull business detail including hours and services
get_business_hoursOpening hours for a specific business
get_business_servicesService catalog and pricing
get_business_faqsOwner-approved FAQs for a business
contact_businessContact channels + capability action URLs (returns links; does not send)
list_verticalsEnumerate all verticals in the registry
Example — get_business_faqs
// get_business_faqs(slug="clinica-dental-norte-tijuana")
{
"slug": "clinica-dental-norte-tijuana",
"name": "Clínica Dental Norte",
"faqs": [
{ "question": "¿Atienden urgencias?", "answer": "Sí, atendemos urgencias con cita el mismo día." },
{ "question": "¿Aceptan seguros dentales?", "answer": "Trabajamos con las principales aseguradoras nacionales." }
]
}
contact_business(slug) returns the business's contact channels — phone, whatsapp_url (a WhatsApp deep link), website, email (claimed businesses only), and capabilities with ready-to-use action_urls. It returns links for your agent to act on — it does not send the message itself.
Errors
Errors return a JSON body of the shape { "detail": "…" } with the matching HTTP status.
// 401 — missing / invalid / revoked API key
{ "detail": "API key inválida o revocada" }
// 429 — per-minute rate limit
{ "detail": "Rate limit excedido (por minuto)" }
// 429 — monthly credits exhausted
{ "detail": "Créditos mensuales agotados" }
