locan-tools
locan (CLI) and locan-mcp (MCP server) — local SEO tools for Google Business Profiles, on top of the Locan API.
Both are thin HTTP clients: no Google Places or LLM keys live on your machine. Point them at the hosted API or at your own self-hosted Locan instance.
Install
uvx --from locan-tools locan find-business "dentist kaunas" # run without installing
pipx install locan-tools # isolated install
pip install locan-tools # into the current environment
Requires Python 3.11 or newer.
Commands
locan find-business "dentist kaunas"
locan gbp-audit --business-name "Smile Dental" --city Kaunas
locan gbp-categories --place-id PLACE_ID --keyword "dentist kaunas" --keyword "teeth whitening"
locan rank-grid --place-id PLACE_ID --keyword "dentist" --grid-size 5 --spacing-km 1
locan ai-visibility --business-name "Smile Dental" --city Kaunas --category dentist
locan review-reply --business-name "Smile Dental" --review-text "Friendly staff, no waiting." --rating 5
locan review-link PLACE_ID
locan schema-jsonld PLACE_ID
| Command | What it does |
|---|---|
find-business |
Looks a business up on Google and prints candidate placeIds — start here. |
gbp-audit |
Scores a public Google Business Profile and adds AI suggestions. Identify the business with --place-id, --business-name + --city, or --gbp-url. |
gbp-categories |
Compares your categories with the competitors ranking for your keywords. Repeat --keyword for up to 10 keywords. |
rank-grid |
Google Maps rankings for one keyword across a grid of nearby locations. --grid-size 3 or 5, --spacing-km 0.5, 1 or 2. |
ai-visibility |
How often AI assistants name the business for local buyer queries. |
review-reply |
Three public replies to a Google review, plus handling tips. --rating 1 to 5. |
review-link |
The direct Google review link for a place id. Runs locally, no API call. |
schema-jsonld |
LocalBusiness JSON-LD built from the business's Google profile. |
Every command prints JSON to stdout. Add --pretty before the command name for a compact table instead:
locan --pretty find-business "dentist kaunas"
API errors are printed to stderr as error: <message> (<code>) and exit with status 1.
Self-hosting
LOCAN_API_URL selects the API. It defaults to https://api.locan.ai/api; point it at your own instance to skip the hosted limits:
export LOCAN_API_URL=http://localhost:8080/api
locan find-business "dentist kaunas"
MCP server
locan-mcp exposes the same eight tools (find_business, gbp_audit, gbp_categories, rank_grid, ai_visibility, review_reply, review_link, schema_jsonld) to MCP clients over stdio.
Claude Code:
claude mcp add locan -- uvx --from locan-tools locan-mcp
Claude Desktop / Cursor:
{
"mcpServers": {
"locan": {
"command": "uvx",
"args": ["--from", "locan-tools", "locan-mcp"],
"env": { "LOCAN_API_URL": "https://api.locan.ai/api" }
}
}
}
Streamable HTTP instead of stdio:
locan-mcp --http --port 8765
Cost and limits
The tools call Google Places and AI models through the Locan API, so they are not free to run. rank-grid is the most expensive: one Places request per grid cell, 25 for a 5×5 grid. Daily limits apply on the hosted API; self-host for unlimited runs.
License
AGPL-3.0-only. The full text is in LICENSE next to pyproject.toml (and at the repository root of the public repo).
Metadata
Release files for locan-tools 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| locan_tools-0.1.0.tar.gz | 28.8 kB | Without provenance | Details for locan_tools-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| locan_tools-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for locan_tools-0.1.0-py3-none-any.whl |
Total release size: 53.2 kB
Release files / locan_tools-0.1.0.tar.gz
| Download URL | locan_tools-0.1.0.tar.gz |
|---|---|
| Size | 28.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
576865e858f375a2600ac81d653b0c55d47397ecbead7eeadffcc49bcdcfdd75
|
|
BLAKE2b-256 checksum How to use checksums |
194155a3921457e8401bb0b595c60c262411b6336246572f6202d0aba1227793
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Release files / locan_tools-0.1.0-py3-none-any.whl
| Download URL | locan_tools-0.1.0-py3-none-any.whl |
|---|---|
| Size | 24.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2b19f4495659a41ef2dafec1b443ebb0231c11478293a26f49cf29c8610b1304
|
|
BLAKE2b-256 checksum How to use checksums |
4c769be24a0cde0cdb131e39082d2cb90fcb1a82f8e32d0959ca1e8fdc855ced
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Security for locan-tools 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.