@cyanheads/openstreetmap-mcp-server

中文文档
0.7.1发布于 2026/11/05Apache-2.0TypeScriptES Module近 30 天下载 2557

Geocode,倒向地理学编码,并通过MCP运行OpenStreetMap数据上的Overpass空间查询. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

中文使用文档
文档目录20 节
  1. 概览
  2. 工具
  3. 能力参考
  4. openstreetmap_search_places 工具
  5. openstreetmap_reverse_geocode 工具
  6. openstreetmap_lookup_objects 工具
  7. openstreetmap_query_nearby 工具
  8. openstreetmap_query_bbox 工具
  9. openstreetmap_query_raw 工具
  10. 特征
  11. 开始
  12. 配置
  13. 逾越终点故障
  14. 运行服务器
  15. 地方发展
  16. 夹克
  17. 项目结构
  18. 发展指南
  19. 捐款
  20. 许可证

@ cyanheads/ openstreetmap- mcp- 服务器

Geocode,倒向地理学编码,并通过MCP运行OpenStreetMap数据上的Overpass空间查询. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

6 个工具

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概览

OpenStreetMap通过Nominatim和Overpass API的数据. Geocode 定位和地址,将坐标解到最近的地址,查找已知的OSM对象,并通过在某个点周围,一个边框内,或者在OSM边界内标记来查询特征.

工具

工具说明
openstreetmap_search_places将一个地名或地址转换为坐标和结构化的地方数据
openstreetmap_reverse_geocode将纬度/经度转换为最近的地址或地名
openstreetmap_lookup_objects通过 ID 获取已知 OSM 对象的地址记录
openstreetmap_query_nearby在点的半径内查找 OSM 特性
openstreetmap_query_bbox在边框或城市、公园或区域等OSM边界内查找 OSM 特征
openstreetmap_query_raw运行原始 Overpass QL 查询其它工具无法表达的任何信息

能力参考

这个 openstreetmap-guide 技能包括定位解析、空间查询、寻呼、解释覆盖范围和标记结果.

在犬科鉴定前接受参数化名: latitude 编号 : longitude 页:1 lat 编号 : lon 在临近的和反向的询问中, radius_m 为了附近的 radius_meters,以及 q 寻找 query。发送任意一种拼写,从不同时发送. radius, (中文(简体) ), tag,以及 tags 无效; 已公布的术语名称.

openstreetmap_search_places 工具

  • 自由形式 query 或结构字段 street, (中文(简体) ), city, (中文(简体) ), county, (中文(简体) ), state, (中文(简体) ), country, (中文(简体) ), postalcode; 最多40个结果(limit,默认为5;较大 limit 以40为单位使用 limitNotice),缩小 countrycodes, (中文(简体) ), layer, (中文(简体) ), featureType,则a viewbox (限制使用 bounded: true(中文(简体) )
  • 结果带坐标,结构 address, (中文(简体) ), boundingbox, (中文(简体) ), importance,以及 osm_type + 键 osm_id· ; extratags 添加联系人和物理属性标记; 空出第一页失败 no_results名称 countrycodes, (中文(简体) ), layer, (中文(简体) ), featureType边框 viewbox 发送
  • 每页都有结果返回 nextExcludeIds 转回为 exclude_place_ids,因为比 limit 还可以有更多。 一旦结果耗尽, 就会得到零结果和通知, 而不是错误, 并且对实例的 URL 限制走得太长 失败 request_too_long

openstreetmap_reverse_geocode 工具

  • lat 编号 : lon 加号 zoom 从3(国家)到18(建筑,默认); layer 默认为 address,poi
  • 返回结构化的最近索引对象 address, (中文(简体) ), osm_type + 键 osm_id,以及 boundingbox; 无 OSM 数据的坐标失败 no_coverage

openstreetmap_lookup_objects 工具

  • 500人以下 osm_ids 条目,每个前缀 N, (中文(简体) ), W,或 R (单位:千美元)["N240109189"]; 错误的ID失败为 invalid_id_format
  • 头50个独特的身份被查;其余的作为 deferred_ids 下一个呼叫
  • 返回所找到对象的地址记录并列出其余内容 not_found (包括物体Nominatim不指数,例如街道灯;a) notice 携带一个 openstreetmap_query_raw 要检查是否存在的查询

openstreetmap_query_nearby 工具

  • lat 编号 : lon 与 radius_meters 最多50,000(默认为1,000);一个主标签, amenity 或者说 tag_key 带有可选 tag_value,加上最多5个 filters; 每页最多500个特性( 较大) limit 以500为单位 limitNotice(中文(简体) )
  • element_types 除非设置,否则要搜索节点、方式和关系; ["node", "way"] 断绝关系
  • 默认的数值完全匹配; list_item 模式 (tag_value_match,或 match 在过滤器上)匹配分号列表中的一个项目,所以 cuisine =: pizza 还发现 cuisine=pizza;italian
  • 一个 amenity 值为 OpenStreetMap 标记在另一键下(amenity: "museum"; 博物馆为 tourism=museum得到一个 notice 命名要重试的密钥
  • 特点携带 osm_type + 键 osm_id,坐标, distance_meters (到特性的最近点),和完整的标记集,排序最接近的第一; effectiveTag 响应过滤链
  • 通过搜索方式或关系,一个包含点的区域,如它所在的公园或城市,匹配在 distance_meters 0,无论半径,和 areasTimestamp 说地区数据有多老 无法运行区域搜索的结束点会被再次询问,没有它 notice 表示未检查含有此点的区域

openstreetmap_query_bbox 工具

  • 每个呼叫范围:角 south, (中文(简体) ), west, (中文(简体) ), north, (中文(简体) ), east,或 within 和一个 R编号 :W 边界参考文件(R237385由地理编码结果制成 osm_type + 键 osm_id; 相同的标签过滤器, 列表项匹配, 出错 --amenity 通知,每页500个上限为 openstreetmap_query_nearby
  • element_types 除非设置,否则要搜索节点、方式和关系; ["node", "way"] 断绝关系
  • effectiveArea 命名边界 within 达到的目标 name, (中文(简体) ), boundary,以及 admin_level 标记,然后是它所绘制的Overpass区域,所以一个打错了的 ref 显示; areasTimestamp 表示区域数据的历史; 将区域映射到没有区域时, 返回空页并带有通知
  • A 类 west 大于 east 是一个穿越时空的盒子; south 大于 north 失败为 invalid_bbox

openstreetmap_query_raw 工具

  • 任何包含 [out:json]· ; [timeout:N] 来自 timeout_seconds (最多180个,缺省30个)和 [maxsize:268435456] (256 MiB) 当查询设置为无时会被添加;每页最多500个元素(较大) limit 以500为单位 limitNotice(中文(简体) )
  • 返回原始要素(载体) nodes[]关系 members[]),加 (中文(简体) ) total_elements 编辑 effectiveQuery 已发送; 错误的 QL 失败 query_error 带有 Overpass 解析错误
  • max_element_bytes (默认为20,000, 最低为1,000) members, (中文(简体) ), nodes,或 geometry 数组,列于 withheld_keys· ; withheldElements 财务报告和审定财务报表 withheldNotice 说怎么接他们

特征

建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.

OpenStreetMap 特异性 :

  • 诺米纳蒂姆请求的间隔为1,050毫秒,以遵守其每秒一次请求的政策; OSM_USER_AGENT 将服务器识别为两个上游
  • 每个端点限制过路查询 OSM_OVERPASS_MAX_CONCURRENCY,则选择进入失败 OSM_OVERPASS_ENDPOINTS (见 逾越终点故障(中文(简体) )
  • 过关工具页面 limit 财务报告和审定财务报表 offset 报告 totalFound, (中文(简体) ), truncated,以及 nextOffset;结果被缓存了10分钟( Nominatim for 60),所以重传不会产生新的上游请求
  • 超过 64 MiB 的过关响应失败 result_too_large
  • OSM_NOMINATIM_BASE_URL 财务报告和审定财务报表 OSM_OVERPASS_BASE_URL 将服务器指向自托管或镜像实例

方便代理输出 :

  • effectiveQuery 财务报告和审定财务报表 effectiveTag 呼应所发送的 effectiveArea 命名边界 a within 已到达 ; 超时回复 添加 data_timestamp 财务报告和审定财务报表 servingEndpoint,每个响应都带有ODbL attribution
  • osm_type + 键 osm_id 从任何工具种子中 openstreetmap_lookup_objects,而地理编码关系或方式成为 within 参考: openstreetmap_query_bbox
  • Nominatim 工具从不通过标签选择,以及 tagSelectionCaveat 说到做到,雷克克斯、交替、否定 openstreetmap_query_raw
  • 在 Markdown 输出中隐藏名称和标记值; structuredContent 保存原始文本

开始

连接到主机实例, 没有安装 :

claude mcp add --transport http openstreetmap-mcp-server https://openstreetmap.caseyjhand.com/mcp

或者在当地运行它:

claude mcp add openstreetmap-mcp-server -- npx -y @cyanheads/openstreetmap-mcp-server

对于其他客户端,请将此添加到 MCP 配置文件中 :

{
  "mcpServers": {
    "openstreetmap-mcp-server": {
      "command": "npx",
      "args": ["-y", "@cyanheads/openstreetmap-mcp-server"]
    }
  }
}

不需要 API 密钥 。 重用,点数 OSM_NOMINATIM_BASE_URL 财务报告和审定财务报表 OSM_OVERPASS_BASE_URL 在你自己的例子。 对于 Docker 或源构建,请参见 运行服务器。 。 。 .

配置

变量说明默认
OSM_NOMINATIM_BASE_URL诺米纳蒂姆基础 URL. 路径前缀, 如 https://maps.example.com/nominatim 被支持.https://nominatim.openstreetmap.org
OSM_OVERPASS_BASE_URL将每个查询键入一个过端点并禁用故障.未设定
OSM_OVERPASS_ENDPOINTS以逗号分隔, 命令通过端点; 不止一个允许故障 。 忽略当 OSM_OVERPASS_BASE_URL 已经设定.https://overpass-api.de/api/interpreter
OSM_OVERPASS_MAX_CONCURRENCY每个终点飞行中 Max Overpass 查询 公共实例允许每个用户有一个.1
OSM_USER_AGENT用户代理发送到诺米纳蒂姆和Overpass. 按使用政策要求.openstreetmap-mcp-server/<package version>
MCP_TRANSPORT_TYPE运输: stdio 或者说 http。 。 。 .stdio
MCP_HTTP_PORTHTTP 服务器端口.3010
MCP_SESSION_MODEHTTP 会话模式 : stateless, (中文(简体) ), stateful,或 auto。服务器宣布 stateless 在代码中;一个明确的值将覆盖它.stateless
MCP_AUTH_MODE认证 : none, (中文(简体) ), jwt,或 oauth。 。 。 .none
MCP_LOG_LEVEL日志级别 (debug, (中文(简体) ), info, (中文(简体) ), warning, (中文(简体) ), error(见a/c.5/49/70,附件).info
STORAGE_PROVIDER_TYPE存储后端 : in-memory, (中文(简体) ), filesystem, (中文(简体) ), supabase, (中文(简体) ), cloudflare-kv/r2/d1。 。 。 .in-memory
OTEL_ENABLED启用 打开几何。 。 。 .false

见 .env.example 用于完整可选覆盖列表。 任意的无效值 OSM_* 变量在启动时停止服务器,并带有一个给变量命名的信息.

逾越终点故障

默认每个Overpass查询都到一个终点,即自由和开放源码软件操作的主要实例。 列出更多 OSM_OVERPASS_ENDPOINTS 和失败的调用移动到下一个条目, 顺序为 :

OSM_OVERPASS_ENDPOINTS="https://overpass-api.de/api/interpreter,https://overpass.private.coffee/api/interpreter"
  • 多次失败的终点被跳过一段时间( 30秒, 翻倍可达10分钟)
  • 当每个端点都失败时, 呼叫就会失败 rate_limited, (中文(简体) ), upstream_error, (中文(简体) ), overpass_unavailable, (中文(简体) ), endpoints_rejected, (中文(简体) ), endpoints_exhausted,或 endpoints_unavailable,在消息中包含每个端点的结果
  • 端点仅按来源报告(https://overpass-api.de(单位:千美元) servingEndpoint,错误消息和日志
  • 附加条目仅是失败, 且不会添加货币 。 对于允许并行查询的例子,附件 |N 输入https://mirror.example/api/interpreter|4用于 N 槽; 写一字形 | 在 URL 中作为 %7C。永远不要大小化公共实例(自由和开放源码软件服务器、地图.mail.ru、overpass.private.coffee)
  • 呼叫等待槽失败 pacer_shed (单位:千美元) retryAfter 30秒后至少30秒

添加端点会向第三方发送您的询问 。 请检查url=值 (帮助) OSM 维基实例列表,确认它持有全球数据(一个区域实例用空的HTTP 200来解答抽出的问题),并期望镜像会落后于主要实例; servingEndpoint 财务报告和审定财务报表 data_timestamp 显示哪个主机的答案和数据有多新鲜.

运行服务器

地方发展

要求数 Bun v1.4.0 (英语) 或更高(或Node.js v24+).

git clone https://github.com/cyanheads/openstreetmap-mcp-server.git
cd openstreetmap-mcp-server && bun install
cp .env.example .env
# edit .env to override endpoints or the User-Agent as needed
  • 构建和运行制作版本数字 :

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:http
    # or
    bun run start:stdio
    
  • 运行检查和测试数字 :

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    

夹克

docker run --rm -p 3010:3010 ghcr.io/cyanheads/openstreetmap-mcp-server:latest

# or build locally
docker build -t openstreetmap-mcp-server .
docker run --rm -p 3010:3010 openstreetmap-mcp-server

该图像服务 HTTP 于 http://localhost:3010/mcp 在无国籍人会话模式和日志中 /var/log/openstreetmap-mcp-server。默认情况下安装了 OpenTeleometry 端对接点; 构建为 --build-arg OTEL_ENABLED=false 以略去他们。 运行时间遥测直到通过 -e OTEL_ENABLED=true。 。 。 .

项目结构

目录目的
src/mcp-server/tools工具定义*.tool.ts)和共享输入,格式化,以及逃出帮助者. 六道工具横跨诺米纳蒂姆和奥弗帕斯.
src/services/nominatim诺米纳蒂姆服务:为搜索,倒置,和找取,加上分析出错,对API客户端进行节奏.
src/services/overpassOverpass 服务: 查询构建器, 端点失效和执行器, 元素正常化器, 错误解析 .
src/config服务器特定环境变量与Zod解析并验证.
tests/对工具、服务和安全进行单元和综合测试.

发展指南

见 CLAUDE.md 发展准则和建筑规则。 简本:

  • 搬运工投掷,框架渔获量——否 try/catch 在工具逻辑中
  • 使用 ctx.log 用于伐木, ctx.state 用于存储
  • 登记册中的新工具 createApp() 数组在 src/index.ts
  • 环绕外部 API 调用: 验证 生 → 规范到域类型 → 返回输出计划; 永远不要编织缺失的字段

捐款

问题值得欢迎。 提交前进行检查和测试:

bun run devcheck
bun run test

许可证

阿帕奇-2.0 — 见 自由主义 详细情况.

地图数据来源 OpenStreet地图 捐款者,在 开放数据库许可证( ODbL)。 。 。 .

版本与发布记录

@cyanheads/openstreetmap-mcp-server 共发布 40 个版本,首次发布于 2026/05/25;过去 12 个月发布了 40 个版本。

版本发布日期距今
0.7.1latest2026/11/055 天前
0.7.02026/10/2616 天前
0.6.22026/10/2517 天前
0.6.12026/10/1527 天前
0.6.02026/10/041 个月前
0.5.22026/09/221 个月前

关于 @cyanheads/openstreetmap-mcp-server 的常见问题

@cyanheads/openstreetmap-mcp-server 是什么?

Geocode,倒向地理学编码,并通过MCP运行OpenStreetMap数据上的Overpass空间查询. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

如何安装 @cyanheads/openstreetmap-mcp-server?

在项目目录运行 npm install @cyanheads/openstreetmap-mcp-server,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 openstreetmap-mcp-server,可以用 npx openstreetmap-mcp-server 直接运行。

@cyanheads/openstreetmap-mcp-server 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cyanheads/openstreetmap-mcp-server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cyanheads/openstreetmap-mcp-server 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cyanheads/openstreetmap-mcp-server 可以商用吗?

@cyanheads/openstreetmap-mcp-server 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cyanheads/openstreetmap-mcp-server 的下载量有多少?

根据 npm 官方下载统计,@cyanheads/openstreetmap-mcp-server 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,557 次,日均约 85 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cyanheads/openstreetmap-mcp-server 还在维护吗?

最新版本 0.7.1 发布于 2026/11/05(5 天前);至今共发布 40 个版本,其中过去 12 个月发布了 40 个;首次发布于 2026/05/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。