Skip to content

Commit 9e591b1

Browse files
cablateclaude
andauthored
feat: add maps_local_rank_tracker for local SEO grid ranking (#65)
* feat: add maps_local_rank_tracker — geographic grid rank tracking for local SEO N×N grid search simulating LocalFalcon-style rank tracking. Searches the same keyword from multiple coordinates around a center point, returns rank at each grid point, top-3 competitors, and summary metrics (ARP, ATRP, SoLV). Also removes output/ directory (unused drafts) and adds it to .gitignore. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * style: fix prettier formatting Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: make exec air-quality test tolerant of service unavailability Google Air Quality API occasionally returns "service unavailable" in CI. Match the same tolerance pattern used by the MCP tool-call test. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f13aa48 commit 9e591b1

21 files changed

+331
-324
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ credentials.json
44
.env
55
.agents/*
66
.mcpregistry_*
7-
.mcp.json
7+
.mcp.json
8+
output/

README.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919
<img src="./assets/demo-grid-en.png" alt="Travel planning demo — Kyoto 2-day, Tokyo outdoor, Japan 5-day, Bangkok budget" width="800">
2020
</p>
2121

22-
- **17 tools** — 14 atomic + 3 composite (explore-area, plan-route, compare-places)
22+
- **18 tools** — 14 atomic + 4 composite (explore-area, plan-route, compare-places, local-rank-tracker)
2323
- **3 modes** — stdio, StreamableHTTP, standalone exec CLI
2424
- **Agent Skill** — built-in skill definition teaches AI how to chain geo tools ([`skills/google-maps/`](./skills/google-maps/))
2525

2626
### vs Google Grounding Lite
2727

2828
| | This project | [Grounding Lite](https://cloud.google.com/blog/products/ai-machine-learning/announcing-official-mcp-support-for-google-services) |
2929
|---|---|---|
30-
| Tools | **17** | 3 |
30+
| Tools | **18** | 3 |
3131
| Geocoding | Yes | No |
3232
| Step-by-step directions | Yes | No |
3333
| Elevation | Yes | No |
@@ -81,6 +81,7 @@ Special thanks to [@junyinnnn](https://github.com/junyinnnn) for helping add sup
8181
| `maps_explore_area` | Explore what's around a location — searches multiple place types and gets details in one call. |
8282
| `maps_plan_route` | Plan an optimized multi-stop route — uses Routes API waypoint optimization (up to 25 stops) for efficient ordering. |
8383
| `maps_compare_places` | Compare places side-by-side — searches, gets details, and optionally calculates distances. |
84+
| `maps_local_rank_tracker` | Track a business's local search ranking across a geographic grid — like LocalFalcon. Returns rank at each point, top-3 competitors, and metrics (ARP, ATRP, SoLV). |
8485

8586
All tools are annotated with `readOnlyHint: true` and `destructiveHint: false` — MCP clients can auto-approve these without user confirmation.
8687

@@ -117,7 +118,7 @@ Works with Claude Desktop, Cursor, VS Code, and any MCP client that supports std
117118
}
118119
```
119120

120-
Omit or set to `*` for all 17 tools (default).
121+
Omit or set to `*` for all 18 tools (default).
121122

122123
### Method 2: HTTP Server
123124

@@ -143,7 +144,7 @@ Then configure your MCP client:
143144
### Server Information
144145

145146
- **Transport**: stdio (`--stdio`) or Streamable HTTP (default)
146-
- **Tools**: 17 Google Maps tools (14 atomic + 3 composite) — filterable via `GOOGLE_MAPS_ENABLED_TOOLS`
147+
- **Tools**: 18 Google Maps tools (14 atomic + 4 composite) — filterable via `GOOGLE_MAPS_ENABLED_TOOLS`
147148

148149
### CLI Exec Mode (Agent Skill)
149150

@@ -154,7 +155,7 @@ npx @cablate/mcp-google-map exec geocode '{"address":"Tokyo Tower"}'
154155
npx @cablate/mcp-google-map exec search-places '{"query":"ramen in Tokyo"}'
155156
```
156157

157-
All 17 tools available: `geocode`, `reverse-geocode`, `search-nearby`, `search-places`, `place-details`, `directions`, `distance-matrix`, `elevation`, `timezone`, `weather`, `air-quality`, `static-map`, `batch-geocode-tool`, `search-along-route`, `explore-area`, `plan-route`, `compare-places`. See [`skills/google-maps/`](./skills/google-maps/) for the agent skill definition and full parameter docs.
158+
All 18 tools available: `geocode`, `reverse-geocode`, `search-nearby`, `search-places`, `place-details`, `directions`, `distance-matrix`, `elevation`, `timezone`, `weather`, `air-quality`, `static-map`, `batch-geocode-tool`, `search-along-route`, `explore-area`, `plan-route`, `compare-places`, `local-rank-tracker`. See [`skills/google-maps/`](./skills/google-maps/) for the agent skill definition and full parameter docs.
158159

159160
### Batch Geocode
160161

@@ -267,7 +268,8 @@ src/
267268
│ ├── searchAlongRoute.ts # maps_search_along_route tool
268269
│ ├── exploreArea.ts # maps_explore_area (composite)
269270
│ ├── planRoute.ts # maps_plan_route (composite)
270-
│ └── comparePlaces.ts # maps_compare_places (composite)
271+
│ ├── comparePlaces.ts # maps_compare_places (composite)
272+
│ └── localRankTracker.ts # maps_local_rank_tracker (composite)
271273
└── utils/
272274
├── apiKeyManager.ts # API key management
273275
└── requestContext.ts # Per-request context (API key isolation)
@@ -322,6 +324,7 @@ For enterprise security reviews, see [Security Assessment Clarifications](./SECU
322324
| `maps_explore_area` | One-call neighborhood overview (composite) | **Done** |
323325
| `maps_plan_route` | Optimized multi-stop itinerary (composite) | **Done** |
324326
| `maps_compare_places` | Side-by-side place comparison (composite) | **Done** |
327+
| `maps_local_rank_tracker` | Geographic grid rank tracking — local SEO analysis (composite) | **Done** |
325328
| `GOOGLE_MAPS_ENABLED_TOOLS` | Filter tools to reduce context usage | **Done** |
326329

327330
### Planned

README.zh-TW.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919
<img src="./assets/demo-grid-zh.png" alt="旅行規劃展示 — 京都二日遊、東京戶外一日、日本五日、曼谷背包客" width="800">
2020
</p>
2121

22-
- **17 個工具** — 14 個原子工具 + 3 個組合工具(explore-area、plan-route、compare-places)
22+
- **18 個工具** — 14 個原子工具 + 4 個組合工具(explore-area、plan-route、compare-places、local-rank-tracker
2323
- **3 種模式** — stdio、StreamableHTTP、獨立 exec CLI
2424
- **Agent Skill** — 內建技能定義,教 AI 如何串接地理工具([`skills/google-maps/`](./skills/google-maps/)
2525

2626
### vs Google Grounding Lite
2727

2828
| | 本專案 | [Grounding Lite](https://cloud.google.com/blog/products/ai-machine-learning/announcing-official-mcp-support-for-google-services) |
2929
|---|---|---|
30-
| 工具數 | **17** | 3 |
30+
| 工具數 | **18** | 3 |
3131
| 地理編碼 |||
3232
| 逐步導航 |||
3333
| 海拔查詢 |||
@@ -81,6 +81,7 @@ npx @cablate/mcp-google-map --port 3000 --apikey "YOUR_API_KEY"
8181
| `maps_explore_area` | 一次呼叫探索某地周邊 — 搜尋多種地點類型並取得詳情 |
8282
| `maps_plan_route` | 規劃最佳化多站路線 — 地理編碼、最佳順序、回傳導航 |
8383
| `maps_compare_places` | 並排比較地點 — 搜尋、取得詳情,可選計算距離 |
84+
| `maps_local_rank_tracker` | 地理網格排名追蹤(類似 LocalFalcon)— 追蹤商家在不同位置的搜尋排名,回傳 ARP、ATRP、SoLV 指標 |
8485

8586
所有工具標註 `readOnlyHint: true``destructiveHint: false` — MCP 客戶端可自動核准,無需使用者確認。
8687

@@ -117,7 +118,7 @@ npx @cablate/mcp-google-map --port 3000 --apikey "YOUR_API_KEY"
117118
}
118119
```
119120

120-
不設定或設為 `*` 即啟用全部 17 個工具(預設)。
121+
不設定或設為 `*` 即啟用全部 18 個工具(預設)。
121122

122123
### 方法二:HTTP Server
123124

@@ -143,7 +144,7 @@ npx @cablate/mcp-google-map --port 3000 --apikey "YOUR_API_KEY"
143144
### Server 資訊
144145

145146
- **傳輸方式**:stdio(`--stdio`)或 Streamable HTTP(預設)
146-
- **工具數**17 個 Google Maps 工具(14 原子 + 3 組合)— 可透過 `GOOGLE_MAPS_ENABLED_TOOLS` 篩選
147+
- **工具數**18 個 Google Maps 工具(14 原子 + 4 組合)— 可透過 `GOOGLE_MAPS_ENABLED_TOOLS` 篩選
147148

148149
### CLI Exec 模式(Agent Skill)
149150

@@ -154,7 +155,7 @@ npx @cablate/mcp-google-map exec geocode '{"address":"台北101"}'
154155
npx @cablate/mcp-google-map exec search-places '{"query":"東京拉麵"}'
155156
```
156157

157-
全部 17 個工具可用:`geocode``reverse-geocode``search-nearby``search-places``place-details``directions``distance-matrix``elevation``timezone``weather``air-quality``static-map``batch-geocode-tool``search-along-route``explore-area``plan-route``compare-places`。完整參數文件見 [`skills/google-maps/`](./skills/google-maps/)
158+
全部 18 個工具可用:`geocode``reverse-geocode``search-nearby``search-places``place-details``directions``distance-matrix``elevation``timezone``weather``air-quality``static-map``batch-geocode-tool``search-along-route``explore-area``plan-route``compare-places``local-rank-tracker`。完整參數文件見 [`skills/google-maps/`](./skills/google-maps/)
158159

159160
### 批次地理編碼
160161

@@ -264,7 +265,8 @@ src/
264265
│ ├── searchAlongRoute.ts # maps_search_along_route 工具
265266
│ ├── exploreArea.ts # maps_explore_area(組合)
266267
│ ├── planRoute.ts # maps_plan_route(組合)
267-
│ └── comparePlaces.ts # maps_compare_places(組合)
268+
│ ├── comparePlaces.ts # maps_compare_places(組合)
269+
│ └── localRankTracker.ts # maps_local_rank_tracker(組合)
268270
└── utils/
269271
├── apiKeyManager.ts # API key 管理
270272
└── requestContext.ts # Per-request context(API key 隔離)
@@ -318,6 +320,7 @@ skills/
318320
| `maps_explore_area` | 一次呼叫的社區概覽(組合工具) | **完成** |
319321
| `maps_plan_route` | 最佳化多站行程(組合工具) | **完成** |
320322
| `maps_compare_places` | 並排地點比較(組合工具) | **完成** |
323+
| `maps_local_rank_tracker` | 地理網格排名追蹤 — Local SEO 分析(組合工具) | **完成** |
321324
| `GOOGLE_MAPS_ENABLED_TOOLS` | 篩選工具以減少上下文用量 | **完成** |
322325

323326
### 計畫中
-7.13 MB
Binary file not shown.
-7.13 MB
Binary file not shown.
-7.56 MB
Binary file not shown.
-7.56 MB
Binary file not shown.
-7.42 MB
Binary file not shown.
-7.42 MB
Binary file not shown.
-638 KB
Binary file not shown.

0 commit comments

Comments
 (0)