Skip to main content
Glama
HasData

Google Maps MCP Server

Google Maps MCP 服务器

一个托管的模型上下文协议(MCP)服务器,为 Claude、Cursor、Windsurf 以及任何其他 MCP 客户端提供六个只读的 Google Maps 工具。搜索地点、完整读取地点信息、获取其评论、照片和帖子,并浏览单个评论者的历史记录,全部以结构化 JSON 形式返回,无需 Google Cloud 项目,也无需启用计费。

https://mcp.hasdata.com/api/mcp?apis=google_maps

Glama score tool contract MCP Tools License

目录

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

https://mcp.hasdata.com/api/mcp?apis=google_maps

传输方式

HTTP,流式

认证标头

x-api-key: HASDATA_API_KEY

服务器 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 积分。搜索返回的结果已附带 placeIddataId,下面的后续操作无需查找步骤。

获取 ChIJAb0KE0RrkFQRuI4X0By5Mcw 的完整详情:营业时间、服务选项、价格等级和菜单链接。

一次调用,5 积分。

读取该地点最新的评论,按最新优先排序,并告诉我哪些主题出现得最多。

一次调用,5 积分。响应携带 Google 自己的主题聚类,每个主题带有提及次数,排名已在数据中。

取最高评论的作者,列出他们评论过的所有其他地点,以及他们留下的评分。

一次调用,5 积分。一条评论携带其作者的 contributorId,这正是贡献者工具所需的输入。

获取该地点的照片流和该商家的近期帖子。

两次调用。照片花费 5 积分,帖子花费 10 积分。

有两个原因使这些链式调用变得便宜。搜索在每个结果上都返回 placeIddataId,而详情、评论、照片和帖子调用无需单独的解析步骤。此外,一条评论携带作者的 contributorId,这使"谁留下了这条评论"变成一次调用即可跳转到该人的完整历史。

工具

六个工具,全部只读。以下示例来自真实调用并经过精简,其中的数字会随着地点获得更多评论而变化。请将它们视为数据结构示例。每个工具名称都链接到其端点参考文档。

示例是负载(payload),不是完整响应。tools/call 结果携带一个文本块,该文本本身是包含 urlstatustextjson 的 JSON,抓取的数据位于 json 下。从原始 JSON-RPC 响应来看,路径是 result.content[0].text,解析后取 .json。聊天客户端会为你解包,而直接与端点通信的代码则需要自行处理。

其中四个工具接受通过 placeIddataId 指定的地点。搜索在每个结果上都返回两者。通常的流程是一次搜索,然后复用你保留的任一 ID 进行详情、评论、照片或帖子调用。

搜索 Google Maps

hasdata_google_maps_search_performMapSearch

按 Google Maps 的排名方式返回查询结果中的地点。

参数

类型

必填

说明

q

string

自由文本查询,例如 coffeeplumber

ll

string

地图中心和缩放级别,格式为 @lat,lng,zoomz,例如 @47.6062,-122.3321,14z。这是将搜索固定到某个位置的方式

gl / hl

string

两位字母的国家和语言代码

domain

string

要查询的 Google 域名,例如 google.com

start

number

分页的结果偏移量,步长为 20。需要同时设置 ll

每个结果携带 positiontitleplaceIddataIdaddressgpsCoordinatesratingreviewstypetypespricewebsitethumbnailopenStateworkingHoursserviceOptions,以及 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 获取一个地点的完整信息。

参数

类型

必填

说明

placeId

string

搜索结果中的 placeId

hl

string

语言代码

domain

string

Google 域名

返回一个 placeResults 对象,包含与搜索结果相同的字段,外加一个 images 数组。这是在无需运行不必要的搜索的情况下获取单个地点完整记录的方式。

获取地点评论

hasdata_google_maps_reviews_getMapReviews

一个地点的评论流,逐页获取。

参数

类型

必填

说明

placeId

string

地点。placeIddataId 必须有一个存在

dataId

string

dataId 形式指定的地点

sortBy

string

默认为 mostRelevant,另有 newestFirstratingHighratingLow

topicId

string

按主题筛选,使用 topics 数组中的 id

hl

string

语言代码

nextPageToken

string

上一次响应中的 pagination.nextPageToken

返回 placeInfotopics 数组、reviews 数组和 pagination。每条评论携带 reviewIdratingsnippetdateisoDatelinkimagesuser 对象,以及商家回复时的 response

topics 是 Google 自己对评论提及内容的聚类,每个主题带有 keywordmentions 计数,主题已预先统计,无需你阅读每条评论。将主题的 id 作为 topicId 传回,即可只读取提及该主题的评论。

每条评论的 user 携带 contributorId。这就是贡献者工具所需的输入,因此"谁写的"距离"他们写的所有内容"只有一次调用之遥。

{
  "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

一个人写过的所有评论,涵盖他们评分过的所有地点。

参数

类型

必填

说明

contributorId

string

评论 user 对象中的 contributorId

num

number

要返回的评论数量

gl / hl

string

国家和语言代码

nextPageToken

string

上一次响应中的令牌

返回一个 contributor 对象,包含 namelevelpointscontributions 细分,以及一个 reviews 数组,其中每条记录都携带自己的 placeInfo,无需二次查找即可看到每条评论对应哪个地点。这是评论者可信度和评论网络分析背后的工具,仅靠评论流无法完成这些工作。它读取一个人的公开评论历史,因此请在 Google 条款和适用法律的范围内使用结果。

获取地点照片

hasdata_google_maps_photos_getMapPhotos

一个地点的照片流。

参数

类型

必填

说明

placeId

string

地点。placeIddataId 必须提供其一

dataId

string

dataId 形式提供的地点

categoryId

string

使用 categories 数组中的 id 筛选到单个类别

hl

string

语言代码

nextPageToken

string

来自上一个响应的令牌

返回一个 categories 数组(AllLatestVideosMenu 以及地点专属类别)、一个 photos 数组(每个条目包含 imagethumbnail URL),以及 pagination

获取地点帖子

hasdata_google_maps_posts_getMapPosts

商家在其 Google 列表上发布的帖子和更新。

参数

类型

必填

说明

placeId

string

地点。placeIddataId 必须提供其一

dataId

string

dataId 形式提供的地点

hl

string

语言代码

nextPageToken

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,并指明字段名称。不会获取任何数据,也不会产生任何费用。

评论、照片或帖子调用需要地点。 这三者接受 placeIddataId,两者都不传会返回 422 并指明这两个字段,因为该要求是有条件的,schema 无法将其表示为简单的必填列表。请传入其中一个。

无法解析的地点 ID 是明确的错误,而不是空数据。 它会返回 isError: true,附带 HasData API error: 400 Bad Request,且 requestMetadata.status 设为 error。应检查该标志而不是数组长度。

空的 posts 是真实数据。 大多数列表没有帖子,因此调用会以 status ok 和空数组成功返回。该地点只是没有任何已发布的内容。

携带数据的结果还包含 requestMetadata.id,在支持工单中值得引用,以及指向该次调用存储产物的 htmljson 链接。

定价、免费额度与限制

搜索、地点详情、评论、贡献者评论和照片每次成功调用消耗 5 个积分。帖子消耗 10 个。响应大小不会改变价格。一整页评论与只有一条评论的页面费用相同。

免费试用为30 天内 1,000 个积分,无需绑定银行卡,按 5 积分/次计算可调用 200 次。之后,活跃账户在余额低于 100 时每天会自动补充 100 个积分,因此低流量智能体可以无限期使用免费套餐。

付费套餐起价为每月 $49,包含 200,000 个积分,即 40,000 次五积分调用。每积分价格随用量增加而下降,当前数字见定价页面

你的套餐还决定了并发数。免费试用允许同时 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 密钥,一次即可

路由、地理编码、地址验证

支持

不提供

评论

每个地点固定的小样本

完整评论流,支持分页,带主题聚类

评论者的历史

不可用

支持,通过 contributorId

照片和帖子

有限

照片流和商家的帖子

输出

符合 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,这是一组使用你自己的 Cloud 项目调用的付费 API,多个社区 MCP 服务器对其进行了封装。本服务器是一个托管替代方案,无需 Cloud 项目。

我需要 Google Cloud 项目或 Maps API 密钥吗?

不需要。唯一的凭据是你的 HasData 密钥。无需创建 Google Cloud 项目,无需启用计费,也无需管理每个 API 的配额。

placeIddataId 有什么区别?

它们是 Google 用于同一地点的两个 ID。搜索会在每个结果中同时返回两者,详情、评论、照片和帖子工具都接受其中任意一个。从搜索结果中保留你喜欢的那个并重复使用即可。

如何获取所有评论,而不仅仅是第一页?

从每个响应中读取 pagination.nextPageToken,并将其作为 nextPageToken 传回,直到不再返回为止。每页是一次调用。

我需要托管或运行什么吗?

不需要。这是一个基于 streamable HTTP 的远程 MCP 服务器。无需安装任何东西,无需 Python 环境,无需重启进程。

数据是实时的还是缓存的?

实时的。每次调用都在请求时获取数据,并带有自己的 requestMetadata.id。两次相同的调用是两次独立的获取,而不是对存储副本的重放。

我可以用一个服务器访问多个 Google 界面吗?

可以。apis 参数接受列表,?apis=google_maps,google_serp 可同时为你的智能体提供地图工具和 Google 搜索。

API 密钥会过期吗?

不会。密钥不会过期。需要时随时可以在仪表盘中轮换它。

这与 Google 有关联吗?

没有。HasData 是独立服务,与 Google 没有关联,未获得 Google 的认可或赞助。Google 和 Google Maps 是其各自所有者的商标。这些工具仅使用公开可用的数据,你有责任按照 Google 的条款和适用于你的法律使用结果。

HasData 链接

产品页面

搜索评论照片帖子

服务器文档

MCP 服务器文档

一个服务器中的全部 57 个工具

HasData/hasdata-mcp

客户端演练

MCP 客户端与集成

我们解析的其他数据源

另外 53 个抓取 API

套餐与积分费用

套餐与积分费用

密钥与用量

HasData 仪表盘

开发

此仓库是远程服务器的配置与文档。没有构建步骤,也没有需要容器化的内容。

它带有一个契约测试。README 承诺了六个具有特定参数的工具,而上游工具列表可能在没有此处提交的情况下发生变化,这会让此文件悄悄误导你。该测试验证这一承诺,并在 CI 中每周运行,同时也在每次推送时运行。

HASDATA_API_KEY=your_key_here npm test

在 PowerShell 中:

$env:HASDATA_API_KEY = "your_key_here"; npm test

最后一项检查会发起真实调用并消耗 5 个积分,这是金丝雀测试的代价,它可能因正确的原因而失败。列出工具只需任何非空密钥即可成功,而仅列出工具的测试在密钥被吊销时仍会保持绿色。

贡献

对工具表格和响应示例的修正是最有价值的贡献,因为这些部分最容易漂移。请附上你发起的调用和收到的响应。来自 fork 的拉取请求会在没有密钥的情况下运行测试套件,实时检查会跳过而不是变红。

许可证

MIT。参见 LICENSE

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Live Google Maps business search, review, and photo data for AI agents over MCP.

  • Google Maps MCP Pack — geocoding, places, directions, distance matrix, elevation.

  • Hosted MCP: 1404 structured web-data tools for search, maps, commerce, social, gaming & finance.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HasData/google-maps-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server