Claude Code
One command, then the tools are available in every session.
claude mcp add --transport http locomint \
https://api.locomint.io/mcp \
--header "Authorization: Bearer YOUR_LOCOMINT_KEY"Locomint is one HTTPS API and one MCP server, so it connects to the tools you already use without a plugin. Pick the way you work: an assistant that calls tools, code, a workflow that runs on a schedule, or a batch job on the Apify Store.
The MCP server exposes nine tools an assistant can call with your key: search and count local businesses, read a full record, read a page, verify addresses, look a company up by domain, check a site's crawler rules, check schema markup and read your own usage.
One command, then the tools are available in every session.
claude mcp add --transport http locomint \
https://api.locomint.io/mcp \
--header "Authorization: Bearer YOUR_LOCOMINT_KEY"Anything that speaks MCP over streamable HTTP takes the same block. Put it in that client's MCP configuration file.
{
"mcpServers": {
"locomint": {
"url": "https://api.locomint.io/mcp",
"headers": {
"Authorization": "Bearer YOUR_LOCOMINT_KEY"
}
}
}
}One endpoint returns business facts already shaped for a context window: at most ten businesses, trimmed fields, a text block, and a citation on every record saying where it came from and when.
curl "https://api.locomint.io/v1/ground/local?q=dentist&location=Lisbon,%20Portugal" \
-H "X-API-Key: $LOCOMINT_KEY"Worth knowing. Your key is a bearer token on the MCP endpoint. Some clients cannot send headers at all; those cannot use the MCP server safely, and the REST API is the right route for them. Never put the key in a URL, where it ends up in shell history and server logs.
There is no SDK to install. Every endpoint is a plain HTTPS call that returns JSON, so the standard HTTP library in your language is the client.
Any HTTP library. This uses requests.
import os, requests
r = requests.get(
"https://api.locomint.io/v1/places/search",
params={"q": "dentist", "location": "Lisbon, Portugal", "limit": 20},
headers={"X-API-Key": os.environ["LOCOMINT_KEY"]},
timeout=30,
)
r.raise_for_status()
for place in r.json()["data"]:
print(place["name"], place.get("phone_e164"), place.get("website"))Built-in fetch, Node 18 and later.
const params = new URLSearchParams({
q: "dentist", location: "Lisbon, Portugal", limit: "20",
});
const r = await fetch(`https://api.locomint.io/v1/places/search?${params}`, {
headers: { "X-API-Key": process.env.LOCOMINT_KEY },
});
if (!r.ok) throw new Error(`Locomint ${r.status}`);
const { data } = await r.json();
for (const place of data) console.log(place.name, place.website);The full machine-readable description of every endpoint. Import it into Postman or Insomnia, or point a code generator at it to get a typed client in your own language.
curl https://api.locomint.io/openapi.jsonWorth knowing. Send the key as the X-API-Key header from your own server, never from a browser or a mobile app, where anyone can read it.
There is no dedicated Locomint app in these tools. There does not need to be: each has a generic HTTP step, and that is all an endpoint like this requires.
Add an HTTP Request node. Method GET, and under Authentication choose Generic Credential Type, then Header Auth, with the name X-API-Key and your key as the value.
URL https://api.locomint.io/v1/places/search
Method GET
Query q = dentist
location = Lisbon, Portugal
limit = 20
Header X-API-Key = your keyUse the HTTP module in Make, or Webhooks by Zapier with the GET action. Both take the same URL, query and header.
URL https://api.locomint.io/v1/places/search?q=dentist&location=Lisbon,%20Portugal
Method GET
Headers X-API-Key: your keyA short Apps Script fills a sheet from a search. Extensions, then Apps Script, then paste this and run it.
function fillFromLocomint() {
const key = "YOUR_LOCOMINT_KEY";
const url = "https://api.locomint.io/v1/places/search"
+ "?q=dentist&location=Lisbon,%20Portugal&limit=20";
const res = UrlFetchApp.fetch(url, {
headers: { "X-API-Key": key },
});
const rows = JSON.parse(res.getContentText()).data
.map(p => [p.name, p.phone_e164, p.website, p.rating]);
const sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(["Name", "Phone", "Website", "Rating"]);
rows.forEach(r => sheet.appendRow(r));
}Worth knowing. There are no outgoing webhooks yet, so an automation polls rather than being pushed to. Change notifications are the next thing planned.
It does not matter whether the call arrives from an assistant, your own code or a workflow. The MCP tools call these same endpoints internally, so there is one key, one monthly balance and one rate card.
At the monthly quota the API answers 402 until you upgrade or the month turns over. There is no overage billing, so nothing you build here can produce a surprise bill. The pricing page has the plans.
No. One key works on every route on this page, and it is the same key the REST API uses. Create one on the signup page; the free plan gives 75 credits a month and needs no card.
No. Every route spends the same credits at the same rates, because the MCP tools call this API's own endpoints internally. One credit per place returned, one per full record, five per reviews call, one per address verified, one per page extracted. Result counts and usage checks are free.
Any client that speaks the Model Context Protocol over streamable HTTP and can send an Authorization header. Claude Code, Claude Desktop, Cursor, VS Code, Cline and Windsurf all do. A client that cannot send headers should use the REST API instead, because the alternative is putting your key in a URL.
Not yet. Every endpoint is a plain HTTPS GET or POST returning JSON, so the standard HTTP library in your language is enough, and the OpenAPI schema will generate a typed client if you want one.
The API answers 402 until you upgrade or the next month starts. There is no overage billing, so a runaway loop cannot produce a bill you did not expect.
Not directly. The key would be readable by anyone using the app. Call Locomint from your own server and pass the results on.