Google Maps MCP Server
Google Maps MCP Server
一个托管的 Model Context Protocol (MCP) 服务器,为 Claude、Cursor、Windsurf 以及任何其他 MCP 客户端提供六个只读的 Google Maps 工具。可以搜索地点、完整读取一个地点、获取其评论、照片和帖子,并查看单个评论者的历史记录。所有数据均为结构化 JSON,无需 Google Cloud 项目,也无需启用计费。
https://mcp.hasdata.com/api/mcp?apis=google_maps
目录
Related MCP server: MCP Google Maps
你需要什么
一个支持通过自定义请求头进行流式 HTTP 通信的 MCP 客户端。从控制台获取 HasData API 密钥,免费创建,无需绑定银行卡;试用额度按每次 5 信用点的费率计算,大约可以覆盖 200 次调用。除此之外不需要任何其他东西。这是一个远程服务器,所以最简单的接入方式是一个 URL 和一个请求头,无需运行容器,整个流程中也不需要 Google Cloud 项目或 API 密钥。仅支持 stdio 的客户端可以改用 @hasdata/google-maps-mcp(npm)或 hasdata-google-maps-mcp(PyPI)启动器。
快速开始
URL |
|
传输方式 | HTTP, streamable |
认证请求头 |
|
服务器 URL 对所有客户端都是同一个。我们已在 Claude Code 和 Claude Desktop 中实际操作过。其余每个配置块都遵循各客户端自己的远程服务器文档格式。
支持 OAuth 的客户端可以将同一个 URL 添加为连接器,登录时无需在配置文件中写入密钥。
claude mcp add --transport http google-maps "https://mcp.hasdata.com/api/mcp?apis=google_maps" \
--header "x-api-key: HASDATA_API_KEY"Claude Desktop 只会从其配置文件中加载本地(stdio)服务器,因此它需要通过 stdio 启动器访问远程服务器。@hasdata/google-maps-mcp 就是这个启动器,它会从环境中读取密钥。
claude_desktop_config.json:
{
"mcpServers": {
"google-maps": {
"command": "npx",
"args": ["-y", "@hasdata/google-maps-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}使用 Python 而不是 Node?将启动器换成 PyPI 包,uvx 可以直接运行,无需手动安装:
{
"mcpServers": {
"google-maps": {
"command": "uvx",
"args": ["hasdata-google-maps-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}支持 OAuth 的客户端也可以将该 URL 添加为自定义连接器,从而跳过启动器。
.cursor/mcp.json:
{
"mcpServers": {
"google-maps": {
"url": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"google-maps": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}{
"mcpServers": {
"google-maps": {
"url": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}.vscode/mcp.json:
{
"servers": {
"google-maps": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.gemini/settings.json:
{
"mcpServers": {
"google-maps": {
"httpUrl": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}示例提示
以下每条都是单次工具调用,除非另有计数说明。
在 Google Maps 上搜索西雅图市中心附近的咖啡店,并给出评分、评论数量和网站排名前十的结果。
单次调用,消耗 5 信用点。搜索返回的结果已附带 placeId 和 dataId,下面的后续调用无需额外的查找步骤。
获取
ChIJAb0KE0RrkFQRuI4X0By5Mcw的完整详情:营业时间、服务选项、价格等级和菜单链接。
单次调用,消耗 5 信用点。
阅读该地点的最新评论,按最新优先排序,并告诉我哪些主题出现得最多。
单次调用,消耗 5 信用点。响应中包含 Google 自身的主题聚类,每个主题都带有提及次数,排名信息也包含在数据中。
以置顶评论的作者为对象,列出他们评价过的所有其他地点,以及他们给出的评分。
单次调用,消耗 5 信用点。每条评论都带有作者的 contributorId,这正是评论者(contributor)工具需要的输入。
获取该地点的照片流以及该商家的近期帖子。
两次调用。照片消耗 5 信用点,帖子消耗 10 信用点。
有两点让这些调用链很便宜。搜索会在每个结果上返回 placeId 和 dataId,而详情、评论、照片和帖子调用不需要单独的解析步骤。此外,评论带有作者的 contributorId,这能把“谁留下了这条评论”变成一次调用即可跳转到该评论者的全部历史。
工具
六个工具,均为只读。下面的示例来自真实调用并做了删减,其中的数字会随着地点获得更多评论而变化。请把它们看作结构示例。每个工具名称都链接到其端点参考文档。
示例展示的是有效载荷,而不是完整响应。tools/call 的结果包含一个文本块,该文本本身是 JSON,包含 url、status、text 和 json,抓取到的数据位于 json 字段下。从原始 JSON-RPC 响应来看,路径是 result.content[0].text,解析后再取 .json。聊天客户端会为你解包,而直接与端点通信的代码则不会。
其中四个工具可以通过 placeId 或 dataId 来指定地点。搜索会在每个结果上同时返回两者。通常的流程是:先执行一次搜索,然后在详情、评论、照片或帖子调用中复用你保留的任意一个 id。
搜索 Google Maps
hasdata_google_maps_search_performMapSearch
针对查询返回地点,排序方式与 Google Maps 一致。
参数 | 类型 | 必填 | 说明 |
| 字符串 | 是 | 自由文本查询,例如 |
| 字符串 | 地图中心和缩放级别,格式为 | |
| 字符串 | 两个字母的国家/地区代码和语言代码 | |
| 字符串 | 要查询的 Google 域名,例如 | |
| 数字 | 分页的结果偏移量,按 20 步进。需要同时设置 |
每个结果都包含 position、title、placeId、dataId、address、gpsCoordinates、rating、reviews、type、types、price、website、thumbnail、openState、workingHours、serviceOptions,以及在 Google 显示的情况下,一个 menu 链接。
位置信息位于
ll中,而不是查询中。把地图中心和缩放级别放在那里,因为单独搜索 “coffee” 会返回 Google 认为你所在的任意位置。缩放数字会扩大或缩小结果提取的区域。
{
"localResults": [
{
"position": 1,
"title": "Howdy Y'all Coffee (Central Library)",
"placeId": "ChIJAb0KE0RrkFQRuI4X0By5Mcw",
"dataId": "0x54906b44130abd01:0xcc31b91cd0178eb8",
"address": "1000 4th Ave Fl 3, Seattle, WA 98104",
"rating": 4.9,
"reviews": 117,
"type": "Coffee shop",
"website": "https://howdyyallcoffee.com/",
"workingHours": {
"timezone": "America/Los_Angeles",
"days": [ { "day": "Friday", "time": "10 AM–4 PM" } ]
}
}
]
}获取地点详情
hasdata_google_maps_place_getPlaceDetails
通过 placeId 获取单个地点的完整信息。
参数 | 类型 | 必填 | 说明 |
| 字符串 | 是 | 来自搜索结果的 |
| 字符串 | 语言代码 | |
| 字符串 | Google 域名 |
返回一个单独的 placeResults 对象,包含搜索结果所携带的相同字段,外加一个 images 数组。这是在不执行多余搜索的情况下获取某个地点完整记录的方式。
获取地点评论
hasdata_google_maps_reviews_getMapReviews
逐页获取某个地点的评论流。
参数 | 类型 | 必填 | 说明 |
| 字符串 | 地点。必须提供 | |
| 字符串 | 改用 | |
| 字符串 | 默认为 | |
| 字符串 | 按主题筛选,使用 | |
| 字符串 | 语言代码 | |
| 字符串 | 上一次响应中的 |
返回 placeInfo、topics 数组、reviews 数组和 pagination。每条评论都带有 reviewId、rating、snippet、date、isoDate、link、images、user 对象,以及在商家回复时,一个 response。
topics是 Google 自己对评论提及内容的聚类,每个主题带有keyword和mentions计数,排名信息也包含在数据中。
每条评论的
user都带有contributorId。这正是评论者(contributor)工具需要的输入,因此“谁写了这条评论”与“他们写过的所有内容”之间只隔一次调用。
{
"placeInfo": { "title": "Howdy Y'all Coffee (Central Library)", "rating": 4.9, "reviews": 117 },
"topics": [
{ "keyword": "earl grey matcha", "mentions": 26, "id": "bew1w_KAk5U" },
{ "keyword": "friendly baristas", "mentions": 17, "id": "FOw-91tYieQ" }
],
"reviews": [
{
"reviewId": "…",
"rating": 5,
"snippet": "…",
"isoDate": "2026-07-06T19:49:00.657Z",
"user": { "name": "Angela Li", "contributorId": "106033685843245983748" },
"response": { "isoDate": "2026-07-07T04:44:34.000Z", "snippet": "Thank you!! 🥺☺️" }
}
],
"pagination": { "nextPageToken": "…" }
}获取评论者的评论
hasdata_google_maps_contributor_reviews_getMapReviews
某个人写过的所有评论,覆盖他们评价过的所有地点。
参数 | 类型 | 必填 | 说明 |
| 字符串 | 是 | 来自评论 |
| 数字 | 要返回的评论数量 | |
| 字符串 | 国家/地区代码和语言代码 | |
| 字符串 | 上一次响应中的 token |
返回一个 contributor 对象,其中包含 name、level、points 和 contributions 明细,以及一个 reviews 数组,数组中的每个条目都带有自己的 placeInfo,无需再次查询即可看到每条评论对应哪个地点。这是审核者可信度与评论网络相关工作的工具,仅靠评论信息流无法完成。它读取一个人的公开评论历史,因此请在使用结果时遵守 Google 条款和适用于您的法律。
获取地点照片
hasdata_google_maps_photos_getMapPhotos
一个地点的照片信息流。
参数 | 类型 | 必填 | 备注 |
| string | 地点。必须存在 | |
| string | 改为用 | |
| string | 使用 | |
| string | 语言代码 | |
| string | 上一个响应中的令牌 |
返回一个 categories 数组(All、Latest、Videos、Menu 以及特定于地点的类别)、一个 photos 数组,其中每个条目都包含 image 和 thumbnail URL,以及 pagination。
获取地点帖子
hasdata_google_maps_posts_getMapPosts
商家在其 Google 商家信息中发布的帖子和更新。
参数 | 类型 | 必填 | 备注 |
| string | 地点。必须存在 | |
| string | 改为用 | |
| string | 语言代码 | |
| string | 上一个响应中的令牌 |
返回一个 posts 数组。
大多数地点都不会发布任何内容,因此空的
posts数组是常见情况。在假设存在帖子之前,请先读取数组长度。
错误与失败路径
您的客户端几乎永远不会从工具调用中看到 HTTP 错误代码。MCP 层返回 200,并将失败信息放在结果中,isError 设为 true,原因以文本形式给出。智能体读取到的是一条消息,而不是您可能预期的状态行。
错误的密钥会以工具输出的形式呈现,而不是连接失败。 工具列表接受任何非空密钥,客户端完成握手并显示绿色。随后第一次工具调用会返回 isError: true 和文本 HasData API error: 401 Unauthorized。请注意这个字符串,因为流程中更早的环节不会报告此问题。
唯一真正的 HTTP 错误是缺少密钥。授权在任何工具之前运行,连接本身会以 401 失败。
破坏 schema 的参数会在成为请求之前被拒绝。 没有 q 的搜索会返回 isError: true 和文本 MCP error -32602: Input validation error,并指明该字段。不会获取任何数据,也不会产生任何费用。
评论、照片或帖子的调用需要一个地点。 这三个工具接受 placeId 或 dataId,如果两者都不传,会返回 422 并指明这两个字段,因为该要求是有条件的,而 schema 无法将其表达为普通的必填列表。请传入其中一个。
无法解析的地点 id 是一个明确的错误,而不是空数据。 它会返回 isError: true,附带 HasData API error: 400 Bad Request,并且 requestMetadata.status 设为 error。请测试该标志,而不是检查数组长度。
空的 posts 是真实数据。 大多数商家信息没有帖子,因此调用会以 status ok 和空数组成功返回。该地点只是没有发布任何内容。
带有数据的结果还包含 requestMetadata.id,在支持工单中值得引用,此外还有指向该次确切调用的已存储产物的 html 和 json 链接。
定价、免费套餐与限制
搜索、地点详情、评论、贡献者评论和照片每次成功调用消耗 5 个积分。帖子消耗 10 个积分。响应大小不会改变价格。一整页评论与只有一条评论的页面花费相同。
免费试用为30 天内 1,000 积分,无需银行卡,按 5 积分/次的费率即 200 次调用。之后,只要活跃账户的余额低于 100,每天都会自动补充 100 积分,因此低流量的智能体可以无限期运行在免费套餐上。
付费套餐从每月 49 美元起,含 200,000 积分,相当于 40,000 次 5 积分的调用。每积分价格随用量增加而下降,最新数字见定价页面。
您的套餐还决定并发数。免费试用允许同时 1 个请求,Startup 为 15,Business 为 30,Growth 为 50,高流量套餐从 200 到 1,500。并发是唯一的限流手段。没有单独的每分钟请求数上限,试用也不会以任何其他方式被限速或削减。在任何无人值守的程序中,请以防御性方式处理溢出情况,因为一个在地点之间扇出的智能体会比您更早触及上限。
翻页每次都会消耗一次调用。评论大约每页十条,因此一百条评论大约需要十次调用和 50 积分;而照片每页二十条。在您感受到消耗之前,免费试用的额度足以支撑很久。
工具选择
?apis=google_maps 正好暴露这六个工具。该参数接受一个列表,?apis=google_maps,google_serp 在地图工具之外还会添加 Google 搜索。不传该参数,您将获得 HasData 暴露的全部工具,目前是 57 个。
通常,较窄的列表是更好的默认选择。从六个工具中选择的模型比从五十七个工具中选择的模型更常选对,而且工具描述本身每轮都会消耗上下文。
对比
几乎所有其他 Google Maps MCP 服务器都封装了官方的 Google Maps Platform,这才是真正需要权衡的选择。
这些服务器使用您自己的 Google Cloud 凭据调用 Places、Routes 和 Geocoding API。要运行其中一个,您需要创建 Google Cloud 项目、用银行卡启用结算、逐个开启 API,并管理密钥及其配额。当您需要路线规划、地理编码和地址验证时,这是合适的工具,而本服务器不提供这些功能。
本服务器读取 Google Maps 向访客展示的内容,并以解析后的形式返回。无需 Google Cloud 项目,无需启用结算,也无需管理每个 API 的配额。它还能获取 Places API 不提供的数据:完整的评论信息流(而非固定的少量抽样)、单个评论者的完整历史、照片信息流以及商家的帖子。
官方 Platform 封装 | 本服务器 | |
需要配置的内容 | Google Cloud 项目、结算、每个 API 的密钥和配额 | 一个 API 密钥,一次配置 |
路线规划、地理编码、地址验证 | 是 | 不提供 |
评论 | 每个地点固定的少量抽样 | 完整信息流,分页,带主题聚类 |
评论者的历史记录 | 不可用 | 可以,通过 |
照片和帖子 | 有限 | 照片信息流和商家的帖子 |
输出 | 按 Platform schema 生成的 JSON | 从访客所见内容解析出的 JSON |
费用 | 按次计费,计入您的 Google 账单 | 每次调用 5 积分,帖子 10 积分 |
决策最终归结为两行。如果您需要路线指引,或者需要将地址转换为坐标,本服务器无法帮助您,而 Platform 可以。如果您需要前几条评论背后的完整评论,或者需要了解一个评论者在所有评分地点中的身份,Platform 无法帮助您,而本服务器可以。
本服务器不做什么。 没有路线规划、没有地理编码、没有地址验证、没有距离矩阵,也没有任何写入操作。它只读取地图。
常见问题
什么是 Google Maps MCP 服务器?
一种将 Google Maps 数据以工具形式暴露给 AI 客户端调用的服务器。客户端通过 Model Context Protocol 发送工具调用,服务器获取数据并返回结构化 JSON,然后模型处理结果,永远不会看到 HTML 页面。本服务器暴露六个只读工具,并以远程方式运行。客户端连接一个 URL,无需启动任何本地进程。
有官方的 Google Maps MCP 服务器吗?
Google 没有发布通用型的官方服务器。Google Maps Platform 是一组付费 API,您需要使用自己的 Cloud 项目来调用;有几个社区 MCP 服务器对它进行了封装。本服务器是一个托管替代方案,无需 Cloud 项目。
我需要 Google Cloud 项目或 Maps API 密钥吗?
不需要。唯一的凭据就是您的 HasData 密钥。无需创建 Google Cloud 项目,无需启用结算,也无需管理每个 API 的配额。
placeId 和 dataId 有什么区别?
它们是 Google 用来表示同一地点的两个 id。搜索结果的每个条目都会同时返回这两个 id,详情、评论、照片和帖子工具都接受其中任意一个。从搜索结果中保留任意一个您喜欢的,然后复用它即可。
如何获取全部评论,而不仅仅是第一页?
从每个响应中读取 pagination.nextPageToken,并将其作为 nextPageToken 传回,直到不再返回为止。每一页就是一次调用。
我需要托管或运行什么吗?
不需要。这是一个通过 streamable HTTP 运行的远程 MCP 服务器。无需安装任何东西,无需 Python 环境,也无需重启任何进程。
数据是实时的还是缓存的?
实时的。每次调用都在请求时获取数据,并带有自己的 requestMetadata.id。两次相同的调用是两次独立的获取,而不是重放存储的副本。
我可以让一个服务器用于多个 Google 产品吗?
可以。apis 参数接受一个列表,?apis=google_maps,google_serp 可让您的智能体同时获得地图工具和 Google 搜索。
API 密钥会过期吗?
不会。密钥不会过期。您可以在需要时随时在仪表盘中轮换它。
这与 Google 有关联吗?
没有。HasData 是一项独立服务,与 Google 不存在关联、背书或赞助关系。Google 和 Google Maps 是其各自所有者的商标。这些工具仅使用公开可用的数据,您有责任按照 Google 条款和适用于您的法律使用这些结果。
HasData 链接
产品页面 | |
服务端文档 | |
一个服务端中的全部 57 个工具 | |
客户端演练 | |
我们解析的其他数据源 | |
套餐与积分费用 | |
密钥与用量 | |
npm 上的 Node 启动器 | |
PyPI 上的 Python 启动器 |
开发
此仓库是远程服务器的配置与文档。没有构建步骤,也没有需要容器化的内容。
它确实带有一个契约测试。README 承诺了六个具有特定参数的工具,而上游工具列表可能在没有此处提交的情况下发生变化,从而让此文件在不知不觉中误导你。该测试断言这一承诺,并在 CI 中每周运行,同时也在每次推送时运行。
HASDATA_API_KEY=your_key_here npm test在 PowerShell 中:
$env:HASDATA_API_KEY = "your_key_here"; npm test最后一项检查会发起真实调用并消耗 5 积分,这正是金丝雀的代价,它可以因为正确的原因而失败。使用任意非空密钥即可成功列出工具,而一个仅列出工具的测试在密钥被吊销时仍会保持通过。
贡献
对工具表格和响应示例的修正是最有价值的贡献,因为这些部分容易过时。请附上你发出的调用和收到的响应。来自 fork 的拉取请求会在没有密钥的情况下运行测试套件,实时检查会跳过而不是变红。
许可证
MIT。参见 LICENSE。
Available Tools
6 toolshasdata_google_maps_contributor_reviews_getMapReviewsgoogle_maps_contributor_reviews: GET /AInspect
Get Map Contributor Reviews
Lists all Google Maps reviews authored by a specific Local Guide / contributor by contributorId, with language/country targeting and nextPageToken pagination. Returns per-review rating, text, date, place name, place address, placeId, photos, and owner responses. Use for reviewer reputation checks, detecting fake/bot review patterns, local-guide activity analysis, and building review-author profiles for trust scoring.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | The two-letter country code for the country you want to limit the search to. Provide one exact documented value (245 allowed), e.g. `ac`, `af`. | |
| hl | No | The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`. | |
| num | No | Number of results per page, ranging from 10 to 200. | |
| contributorId | Yes | Google Maps Contributor ID. | |
| nextPageToken | No | Defines the next page token. It is used for retrieving the next page results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the return fields and pagination but does not mention rate limits, errors, or authentication. It implies read-only via the GET method in the title but not explicitly in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear verb, resource, and use-case sentence. It avoids fluff and is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description lists the return fields (rating, text, date, place name, place address, placeId, photos, owner responses) and mentions pagination. It does not cover error handling or limitations, but for a simple GET endpoint it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are described in the schema, and the description adds extra details such as the valid range for 'num' (10-200) and the purpose of 'nextPageToken'. This goes beyond simply restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing Google Maps reviews authored by a specific contributor. It uses a specific verb ('Lists') and resource ('reviews authored by a specific Local Guide / contributor'), distinguishing it from the sibling tool for place reviews (hasdata_google_maps_reviews_getMapReviews).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases ('Use for reviewer reputation checks, detecting fake/bot review patterns, local-guide activity analysis, and building review-author profiles for trust scoring'). It does not explicitly compare with sibling tools, but the contributor focus makes the intended scenario clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_google_maps_photos_getMapPhotosgoogle_maps_photos: GET /AInspect
Get Place Photos
Fetches the photo gallery of a Google Maps place by dataId or placeId, paginated with nextPageToken and filterable by categoryId (all, latest, menu, by owner, videos, street view). Returns each photo with image URL, thumbnail, upload date, uploader, and photoId. Use for restaurant-menu extraction, venue/ambience visual audits, building rich place detail pages, and sourcing up-to-date imagery for POI listings.
| Name | Required | Description | Default |
|---|---|---|---|
| hl | No | The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`. | |
| dataId | No | Google Maps data ID. Either dataId or placeId should be set. | |
| placeId | No | Unique reference to a place on Google Maps. Either dataId or placeId should be set. | |
| categoryId | No | Filters photos by category. | |
| nextPageToken | No | Token for fetching the next page of photos. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the disclosure burden. It discloses pagination via nextPageToken, filtering by categoryId, and the per-photo return fields (image URL, thumbnail, upload date, uploader, photoId). It does not cover auth, rate limits, or error behavior, but the read-only fetch semantics are clear from 'Fetches.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core fetch behavior first and use cases last. The opening heading duplicates the tool title slightly, but the remaining sentences are information-dense and each earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by listing return fields and pagination behavior. It covers the main parameters (dataId/placeId, categoryId, nextPageToken) and provides use cases; only the optional hl parameter and required-parameter rules are left to the schema, which documents them adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by enumerating categoryId values ('all, latest, menu, by owner, videos, street view'), clarifying the dataId/placeId alternative, and tying nextPageToken to pagination. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetches the photo gallery of a Google Maps place.' It clearly distinguishes this tool from sibling Google Maps tools such as reviews, posts, and place details by centering on photos. The scope (by dataId or placeId) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete use cases: 'restaurant-menu extraction, venue/ambience visual audits, building rich place detail pages, and sourcing up-to-date imagery for POI listings.' This tells an agent when the tool is valuable, but it does not explicitly name alternatives or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_google_maps_place_getPlaceDetailsgoogle_maps_place: GET /AInspect
Get Place Details
Fetches full Google Maps place data by placeId with optional domain/language localization. Returns name, address, coordinates, phone, website, categories, hours, rating, review count, price level, photos, popular times, attributes/amenities, plus_code, and map URL. Use for local SEO audits, POI enrichment, lead generation, competitor mapping, and building location-aware agents.
| Name | Required | Description | Default |
|---|---|---|---|
| hl | No | The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`. | |
| domain | No | Google domain to use. Default is google.com. Provide one exact documented value (195 allowed), e.g. `google.ac`, `google.ad`. | |
| placeId | Yes | A unique identifier for the place. This ID can be obtained from Google Maps search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It clearly states that the operation fetches (read-only) and enumerates the returned data fields, while also noting optional domain/language localization. It does not mention rate limits, error behavior, or response format, but for a simple GET-by-ID endpoint the core behavior is adequately disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded: it states the action first, then the returned payload, then the use cases. The field list is long but earns its place because there is no output schema. The redundant heading 'Get Place Details' is a minor blemish.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters, no output schema, and no annotations, the description supplies the essential return-value list and use cases, so an agent can judge when to call it and what to expect. It could be more complete by pointing to performMapSearch as the way to obtain a placeId or by noting response formatting, but these are not blocking gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description adds only a small amount of context by saying the localization parameters are optional and by framing placeId as the lookup key; it does not provide additional parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: it 'Fetches full Google Maps place data by placeId', immediately distinguishing this details-by-ID tool from sibling tools like performMapSearch, getMapReviews, getMapPhotos, and getMapPosts. The explicit field list (name, address, coordinates, phone, categories, hours, etc.) reinforces that this is the comprehensive place-details endpoint, not a focused sub-resource tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete application context—'local SEO audits, POI enrichment, lead generation, competitor mapping, and building location-aware agents'—which tells an agent when this enrichment tool is appropriate. It does not explicitly name sibling tools or state when not to use it, so it falls short of full 5-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_google_maps_posts_getMapPostsgoogle_maps_posts: GET /AInspect
Get Map Posts
Paginated fetch of Google Maps Posts (timeline-style updates such as offers, events, announcements, and notices) for a place by dataId or placeId, with language targeting and nextPageToken pagination. Returns per-post title, description, image, posted_at, link, and source/business name. Use for small-business intelligence, local-marketing monitoring, competitor activity tracking, and surfacing current promotions and events from local merchants.
| Name | Required | Description | Default |
|---|---|---|---|
| hl | No | The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`. | |
| dataId | No | Google Maps data ID. | |
| placeId | No | Unique reference to a place on a Google Map. Either dataId or placeId should be set. | |
| nextPageToken | No | Defines the next page token. It is used for retrieving the next page results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the operation is a paginated fetch and enumerates the returned data. However, with no annotations provided, it does not mention authentication requirements, rate limits, or potential side effects, so it does not fully carry the behavioral transparency burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It covers what the tool does, what it returns, and relevant use cases in a compact two-paragraph format without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is fairly complete for a read-only fetch tool: it names the resource, the identifier options, the pagination mechanism, the return fields, and practical use cases. It could be slightly stronger by explicitly addressing parameter precedence or edge cases, but it is adequate for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all four parameters with descriptions, so the baseline is 3. The tool description adds minor context by mentioning 'by dataId or placeId' and 'nextPageToken pagination,' but it does not significantly enhance what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: fetch Google Maps Posts for a place by dataId or placeId. It also specifies the resource type and outlines returned fields, making it easily distinguishable from sibling tools like reviews or photos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear use cases such as small-business intelligence, local-marketing monitoring, and competitor activity tracking. It does not explicitly mention when not to use it or name alternative sibling tools, but the stated use cases give solid contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_google_maps_reviews_getMapReviewsgoogle_maps_reviews: GET /AInspect
Get Map Reviews
Paginated fetch of Google Maps reviews for a place by dataId or placeId, with sort (mostRelevant, newestFirst, ratingHigh, ratingLow), topicId filter, and language. Returns per-review author name and profile link, star rating, text, published/relative date, likes count, owner response, attached photos, and local-guide flag. Use for reputation management, sentiment and topic mining, competitor review benchmarking, and feeding review data into summarization or trust-score LLMs.
| Name | Required | Description | Default |
|---|---|---|---|
| hl | No | The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`. | |
| dataId | No | Google Maps data ID. | |
| sortBy | No | Parameter used for sorting and refining results. | |
| placeId | No | Unique reference to a place on a Google Map. Either dataId or placeId should be set. | |
| topicId | No | Defines the ID of the topic you want to use for filtering reviews. | |
| nextPageToken | No | Defines the next page token. It is used for retrieving the next page results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses pagination behavior, sort/filter options, mutually exclusive identifiers, and the per-review fields returned. It does not mention rate limits, errors, or read-only guarantees, but the core behavior is adequately described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: a short title, a functional summary, a list of returned fields, and use cases. It is slightly repetitive in listing parameter names that already appear in the schema, but it remains appropriately sized and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough context for an agent to select and invoke the tool correctly: purpose, key parameters, pagination token, and expected output fields. It is not exhaustive (no output schema or error scenarios), but it is adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the baseline is 3. The description adds meaningful context beyond the schema, particularly that either dataId or placeId should be set and that pagination is handled via nextPageToken, which improves parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches Google Maps reviews, with resource, operation, and key refinements (dataId/placeId, sorting, topic, language). It is clearly distinguished from sibling tools for photos, posts, place details, and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases such as reputation management, sentiment analysis, competitor review benchmarking, and feeding summarization/trust-score LLMs. It does not explicitly say when not to use it versus a sibling, but the resource-specific language makes the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_google_maps_search_performMapSearchgoogle_maps_search: GET /AInspect
Get Google Maps Search Results
Runs a Google Maps search by keyword plus optional GPS coordinates (@lat,lng,zoomz via ll) with language, country, domain, and offset-based pagination (start). Returns the local pack list with placeId, name, address, coordinates, rating, review count, price level, categories, phone, website, hours, and thumbnail. Use for local lead generation, competitor density mapping, market expansion research, hyperlocal directories, and feeding placeIds into the Maps Place, Reviews, or Photos endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query term or phrase. | |
| gl | No | The two-letter country code for the country you want to limit the search to. Provide one exact documented value (245 allowed), e.g. `ac`, `af`. | |
| hl | No | The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`. | |
| ll | No | GPS coordinates of the location where the search query is to be performed. This parameter is required if the 'start' parameter is present. The format for the `ll` parameter is `@` followed by latitude, longitude, and zoom level, separated by commas. The latitude and longitude should be in decimal degrees, and the zoom level is an integer. Example: `@40.7455096,-74.0083012,14z`. | |
| start | No | Specifies the result offset for pagination purposes. The offset dictates the number of rows to skip from the beginning of the results. This is useful for accessing subsequent pages of search results. For example, an offset of 0 (the default value) returns the first page of results, 20 returns the second page, 40 returns the third page, and so on. This parameter is especially relevant when used in conjunction with the 'll' parameter for location-based searches. | |
| domain | No | Google domain to use. Default is google.com. Provide one exact documented value (195 allowed), e.g. `google.ac`, `google.ad`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the search behavior, return fields, pagination via start, and the dependency between ll and start. It does not mention rate limits or error handling, but for a read-only search API this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main purpose, and structured into three clear sentences: what it does, what it returns, and when to use it. It avoids unnecessary verbosity while covering essential details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description compensates by enumerating the exact fields returned in the local pack list. It also covers pagination behavior, language/country/domain options, and practical use cases, making it complete for an agent to decide invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Every parameter in the schema has a description that adds significant meaning beyond the type. The ll parameter includes a format example and a conditional requirement, start explains pagination with concrete offsets, and gl/hl/domain include value ranges and examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a Google Maps search and returns the local pack list with specific fields. It distinguishes itself from sibling tools like place details, reviews, and photos by focusing on the search entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists concrete use cases (local lead generation, competitor density mapping, market expansion research) and hints at follow-up tools by mentioning feeding placeIds into Maps Place, Reviews, or Photos endpoints. It does not explicitly say 'when not to use', but the use-case list is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
hasdata_google_maps_contributor_reviews_getMapReviews - First observed
hasdata_google_maps_photos_getMapPhotos - First observed
hasdata_google_maps_place_getPlaceDetails - First observed
hasdata_google_maps_posts_getMapPosts - First observed
hasdata_google_maps_reviews_getMapReviews - First observed
hasdata_google_maps_search_performMapSearch
TDQS
Scored across 6 tools
Each tool targets a distinct data type: search for places, place details, reviews for a place, reviews by a contributor, photos, and posts. There is no ambiguity between them, even though search and place details both return place info — search is for discovery, place details is for a specific known place.
All tool names follow a consistent pattern: hasdata_google_maps_<resource>_get<Action> (or performMapSearch for search). The resource is always a clear noun (search, place, reviews, contributor_reviews, photos, posts), and the action verb is consistent (get) or explicit (performMapSearch). This is highly predictable.
Six tools is a well-scoped count for a Google Maps data extraction server. Each tool covers a distinct endpoint needed for local business intelligence, and none are redundant or trivial. This is within the ideal range and feels complete for the stated purpose.
The tool set covers the core lifecycle of Google Maps data: search for places, fetch details for a place, retrieve reviews (both for a place and by a contributor), get photos, and get posts/updates. This is a comprehensive read-only surface for building location-aware agents, lead generation, and reputation management, with no obvious gaps.
Maintenance
Related MCP Connectors
Hosted MCP for live place search, geocoding & turn-by-turn routes. No Maps API key to manage.
Scrape Google Maps business leads, reviews, and photos via hosted Remote MCP.
Live Google Maps business search, review, and photo data for AI agents over MCP.
Hosted, read-only Google Search Console MCP: performance, comparisons, URL inspection, sitemaps.
Related MCP Servers
- AlicenseCqualityDmaintenanceProvides access to Google Maps API functionality including geocoding, place search, direction routing, and distance calculations through a structured MCP interface.48 npmMIT
- AlicenseAqualityDmaintenanceProvides access to Google Maps API functionality including places search, geocoding, directions, distance matrix, elevation data, and static map generation through the MCP interface.815 npm1MIT
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for Google Maps services including directions, geocoding, distance matrix, and places search.13Apache 2.0
- AlicenseBqualityFmaintenanceProvides comprehensive access to Google Maps Platform APIs through MCP, enabling geocoding, places search, routing, and geospatial operations.15114 npm3MIT