mcpField
J
JustRouting MCP Server

JustRouting MCP Server

本地服务
justrouting.tech地图与出行11 周前更新

关于 JustRouting MCP Server

JustRouting MCP Server 提供地理编码、路线计算、距离与行程时间矩阵及车辆路线优化,重点覆盖东南亚。适用于通过 MCP 兼容助手处理位置查询和车队规划。

主要功能

  1. 01地点与地址地理编码
  2. 02驾车及摩托车路线
  3. 03距离与行程时间矩阵
  4. 04多车辆路线优化
  5. 05容量、技能与时间窗约束

适用场景

  1. 01计算地点之间的路线
  2. 02比较前往多个目的地的时间
  3. 03为客户匹配附近司机
  4. 04规划多车辆配送路线

MCP 相关

该服务通过 stdio 向 MCP 客户端提供 geocode、route、table 和 optimize 工具。客户端可将这些工具组合用于位置查询和车队规划工作流。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbjustrouting.mcpb

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

JustRouting MCP

CI Go Report Card Latest Release License: MIT

JustRouting MCP MCP 服务 – Glama 上的质量和维护评分

为 AI 助手提供路线规划、地理编码、距离矩阵和车辆路径规划——专注于东南亚。

JustRouting MCP 让 Claude 和 Cursor 等兼容 MCP 的 AI 助手使用 JustRouting 进行道路路线规划、地理编码、距离和行程时间比较,以及多车辆路线优化。

专为东南亚设计。

快速开始

1. 安装
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/justrouting/mcp/main/install.sh | sh

安装程序会下载适用于你平台的最新预编译二进制文件,并安装 justrouting-mcp。

无需安装 Go。

从源码安装
go install github.com/justrouting/mcp/cmd/justrouting-mcp@latest

确保 justrouting-mcp 可通过 PATH 使用。

2. 设置 API 密钥

从 JustRouting 获取 API 密钥,然后设置:

export JUSTROUTING_API_KEY="your-api-key"
3. 连接到 Claude 或 Cursor

添加以下 MCP 服务配置:

{
  "mcpServers": {
    "justrouting": {
      "command": "justrouting-mcp",
      "env": {
        "JUSTROUTING_API_KEY": "your-api-key"
      }
    }
  }
}

该服务通过 stdio 与 MCP 客户端通信。

工具

工具用途
geocode地点或地址 → 坐标
route计算一条路线
table比较多个地点之间的行程时间或距离
optimize将任务分配给车辆,并安排停靠点顺序

这些工具按任务有意分开:

route = 计算 table = 比较 optimize = 决策


geocode

搜索地点或地址,并将其转换为坐标。

当用户提供以下信息时使用:

  • 地点名称
  • 地标
  • 商家
  • 街道地址
  • 其他位置描述

如果用户已提供坐标,则不要使用。

输入
{
  "name": "Marina Bay Sands",
  "housenumber": "10",
  "street": "Bayfront Avenue",
  "postcode": "018956",
  "city": "Singapore",
  "country": "Singapore"
}

可用字段如下:

  • name — 地点、地标或商家名称
  • housenumber — 门牌号或楼宇编号
  • street — 街道名称
  • postcode — 邮政编码或 ZIP 码
  • city — 城市或地区
  • country — 国家/地区
  • limit — 结果数量上限,最多为 10
  • filters — 可选的搜索筛选条件

只提供能从用户请求中确定的字段。不要编造缺失的地址组成部分。

国家/地区和城市信息有助于区分常见或缩写的地点名称。

输出
{
  "results": [
    {
      "longitude": 103.859,
      "latitude": 1.2834,
      "coordinates": "103.859,1.2834",
      "formatted": "Marina Bay Sands, 10 Bayfront Avenue, 018956, Singapore",
      "place_id": "51667b3e...",
      "country_code": "sg",
      "result_type": "building"
    }
  ]
}

结果按相关性排序。

默认返回最匹配的结果。请求多个结果时,选择最符合用户预期地点的结果。

coordinates 值采用 longitude,latitude 格式,可直接传给 route、table 或 optimize。

如果地理编码是路线规划工作流的一部分,请先确认所选结果与预期地点一致,再使用其坐标。


route

计算两个地点之间的驾车路线。

当用户需要以下内容时使用:

  • 计算驾车距离
  • 估算行程时间
  • 获取两个地点之间的路线
  • 获取路线几何信息
  • 了解路线经过哪些道路
  • 避开特定道路类型
输入
{
  "origin": "103.8198,1.3521",
  "destination": "103.9915,1.3644"
}

坐标必须使用:

longitude,latitude

例如:

103.8198,1.3521

可选的摩托车路线规划:

{
  "origin": "103.8198,1.3521",
  "destination": "103.9915,1.3644",
  "profile": "motorcycle"
}

当用户明确要求规划摩托车路线时,使用 profile: "motorcycle"。

否则,省略 profile,以使用默认的驾车配置。

避开道路

当用户明确要求避开某类道路时,使用 exclude。

支持的值:

  • toll
  • motorway
  • ferry

示例:

{
  "origin": "103.8198,1.3521",
  "destination": "103.9915,1.3644",
  "exclude": ["toll"]
}

避开道路只是一项偏好,并非保证。存在合理替代路线时,路线规划引擎会避开指定类型的道路。

输出
{
  "distance_meters": 18500,
  "duration_seconds": 1500,
  "profile": "driving",
  "origin": {
    "input": "103.8198,1.3521",
    "snapped": [103.8197, 1.3520],
    "name": "Example Road",
    "distance": 4.2
  },
  "destination": {
    "input": "103.9915,1.3644",
    "snapped": [103.9915, 1.3644],
    "name": "Airport Boulevard",
    "distance": 8.1
  },
  "geometry": "ka|`@_ceeEnAqB...",
  "summary": {
    "roads": ["East Coast Parkway"],
    "tolls": false,
    "ferry": false
  }
}

distance_meters 是以米为单位的路线距离。

duration_seconds 是以秒为单位的预计行程时长。

geometry 是经过简化的编码折线,可用于在地图上绘制路线。

summary.roads 列出路线经过的主要道路。

summary.tolls 表示路线是否经过收费道路。

summary.ferry 表示路线是否包含渡轮航段。

如果用户提供的是地点名称或地址,而不是坐标,请先调用 geocode。


table

计算多个地点之间的距离和/或行程时间矩阵。

用户需要以下操作时使用:

  • 找出最近的司机、车辆、商店或设施
  • 比较多个目的地
  • 比较多个起点与终点组合
  • 构建距离或行程时间矩阵

不要将其用于规划两个地点之间的单条路线。请改用 route。

输入
{
  "coordinates": [
    "103.8391,1.2771",
    "103.8590,1.2834",
    "103.7986,1.2885"
  ],
  "annotations": ["distance"]
}

每个坐标都会根据其在 coordinates 列表中的位置,获得一个稳定的从零开始的索引。

矩阵的行对应起点。

矩阵的列对应目的地。

位于以下位置的矩阵值:

[row][column]

表示从该起点到该目的地的路线。

例如:

durations[0][2]

表示从起点索引 0 到目的地索引 2 的行程时间。

工具返回的 sources 和 destinations 包含原始坐标索引,因此可以将矩阵映射回用户提供的地点。

最近司机示例

对于以下问题:

哪位司机离这位客户最近?

请将客户放在首位:

coordinates[0] = customer
coordinates[1] = driver A
coordinates[2] = driver B
coordinates[3] = driver C

然后将客户作为起点、司机作为目的地。

读取对应的矩阵行,并选择非空距离或时长中最小的值。

选择起点和目的地

source 和 destinations 可以将矩阵限制为指定的坐标索引。

例如:

{
  "coordinates": [
    "103.8391,1.2771",
    "103.8590,1.2834",
    "103.7986,1.2885"
  ],
  "sources": [0],
  "destinations": [1, 2]
}

这会计算从坐标 0 到坐标 1 和 2 的路线。

注释

使用:

"annotations": ["duration"]

获取行程时间。

使用:

"annotations": ["distance"]

获取距离。

使用:

"annotations": ["duration", "distance"]

同时获取两者。

如果省略,则会返回两者。

输出
{
  "code": "Ok",
  "durations": [
    [0, 1860, null],
    [1850, 0, 2100],
    [null, 2110, 0]
  ],
  "distances": [
    [0, 14200, null],
    [14100, 0, 18400],
    [null, 18200, 0]
  ],
  "sources": [
    {
      "index": 0,
      "name": "Duxton Road",
      "location": [103.8391, 1.2771],
      "distance": 12.3
    }
  ],
  "destinations": [
    {
      "index": 1,
      "name": "Bayfront Avenue",
      "location": [103.8590, 1.2834],
      "distance": 8.4
    }
  ]
}

durations 的单位是秒。

distances 的单位是米。

矩阵值为 null 表示对应的起点与目的地之间无法到达。切勿将 null 解释为零。


optimize

将任务和货运分配给车辆,并确定每辆车访问各停靠点的顺序。

用户需要以下操作时使用:

  • 将多项配送或取货任务分配给车辆
  • 根据货量、载客量、技能或时间窗,为车队规划路线
  • 将取货与配送配对,并要求同一辆车按顺序完成
  • 确定多个停靠点的访问顺序
  • 优化多车辆路线方案

不要将其用于单条路线。请改用 route。

不要仅用它来比较地点之间的距离。请改用 table。

输入
{
  "vehicles": [
    {
      "id": 1,
      "start": "103.7923,1.3246",
      "end": "103.7923,1.3246"
    },
    {
      "id": 2,
      "start": "103.8232,1.3241",
      "end": "103.8232,1.3241"
    }
  ],
  "jobs": [
    {
      "id": 1,
      "location": "103.7975,1.3104"
    },
    {
      "id": 2,
      "location": "103.7843,1.3149"
    },
    {
      "id": 3,
      "location": "103.7976,1.3198"
    }
  ]
}

每辆车必须至少设置 start 或 end。

对于往返路线,将两者设为同一地点:

{
  "id": 1,
  "start": "103.7923,1.3246",
  "end": "103.7923,1.3246"
}

如果省略 start 或 end,车辆可以从任意地点出发或结束行程。

每辆车和每项任务都必须有唯一的 id。货运的取货 id 在所有取货任务中必须唯一,配送 id 在所有配送任务中必须唯一。休息时间的 id 在其所属车辆内必须唯一。

地点必须使用:

longitude,latitude

一个包含载客量、时间窗和优先级的更完整示例:

{
  "vehicles": [
    {
      "id": 1,
      "start": "103.7923,1.3246",
      "end": "103.7923,1.3246",
      "capacity": [1000, 4],
      "time_window": [0, 28800]
    }
  ],
  "jobs": [
    {
      "id": 1,
      "location": "103.7975,1.3104",
      "delivery": [100, 1],
      "service": 300,
      "time_windows": [[0, 14400]],
      "priority": 80
    }
  ],
  "shipments": [
    {
      "pickup": {"id": 2, "location": "103.7843,1.3149", "service": 150},
      "delivery": {"id": 3, "location": "103.7976,1.3198", "service": 150},
      "amount": [50]
    }
  ],
  "options": {"g": true}
}
车辆配置

每辆车都可以使用自己的路线配置。

例如:

{
  "id": 1,
  "profile": "motorcycle",
  "start": "103.7923,1.3246",
  "end": "103.7923,1.3246"
}

当用户明确要求摩托车路线时,使用 "motorcycle"。

否则,省略 profile,以使用默认的驾车配置。

数量和容量

车辆的 capacity 以及任务的 delivery、pickup 和 amount 都是多维的:每个维度对应一个值。

{"capacity": [1000, 4]}

表示 1000 千克和 4 个托盘。单个请求中的所有此类向量长度必须相同。

只有当车辆的载荷始终不超过其容量时,它才能执行一组任务。容量不足不属于错误:相应任务会被移至 unassigned。

技能

skills 是整数能力标签。只有具备任务所需全部技能的车辆才能执行该任务。没有技能要求的任务可以由任何车辆执行。

时间窗

时间窗是以秒为单位的闭区间 [start, end]。整个请求使用同一种计时方式:相对时间(例如 [0, 14400] 表示在规划开始后的 4 小时内)或绝对 UNIX 时间戳。提前到达时,车辆会等待时间窗开启。无法及时抵达的任务会被移至 unassigned。

优先级

priority 的取值范围为 0-100。当无法安排所有任务时,保留优先级较高的任务,并舍弃优先级较低的任务。

配送任务

配送任务由同一辆车按顺序执行取货和送达,amount 在取货时装载,在送达时卸载。

休息

车辆的 breaks 是休息时段,每个休息时段都有一个在该车辆内唯一的 id、可选的 time_windows,以及以秒为单位的 service 时长。

自定义矩阵

matrices 用于按配置("car" 或 "motorcycle")提供自定义行程时间(durations)、距离和成本矩阵。仅当用户提供自己的行程时间时才使用它;此时,location_index、start_index 和 end_index 引用矩阵的行和列,而不是坐标。

路线几何信息

设置 "options": {"g": true} 可获取每条路线的编码折线和距离。当用户想要在地图上绘制路线时使用此选项。

输出

简化的结果如下:

{
  "summary": {
    "cost": 2733,
    "routes": 2,
    "unassigned": 0,
    "duration": 2733,
    "delivery": [100, 1]
  },
  "routes": [
    {
      "vehicle": 1,
      "cost": 1144,
      "duration": 1144,
      "geometry": "encoded_polyline",
      "steps": [
        {
          "type": "start",
          "location": [103.7923, 1.3246],
          "arrival": 0
        },
        {
          "type": "job",
          "id": 2,
          "job": 2,
          "location": [103.7843, 1.3149],
          "arrival": 269,
          "duration": 269,
          "load": [50]
        },
        {
          "type": "end",
          "location": [103.7923, 1.3246],
          "arrival": 1144,
          "duration": 1144
        }
      ]
    }
  ],
  "unassigned": []
}

按顺序读取每条路线的 steps,以确定:

  • 哪辆车执行每项任务
  • 任务的访问顺序
  • 每项任务的抵达时间

路线的 start 和 end 步骤之间可能出现 pickup、delivery 和 break 步骤。violations 字段是为保证 API 完整性而提供的,在托管 API 中始终为空。只有在使用 options.g 时才会出现 geometry。

务必检查 unassigned。

不要假设每项任务都能分配给某辆车。

如果用户提供的是地点名称或地址,而非坐标,请先对每个地点调用 geocode,并在优化请求中使用选定的坐标。


Agent 工作流

JustRouting MCP 的设计目的,是让 AI 助手能够组合多个工具,构建更大的工作流。

计算两地之间的路线

例如:

从 Marina Bay Sands 开车到樟宜机场需要多久?

工作流如下:

geocode → geocode → route
  1. 对起点进行地理编码。
  2. 对终点进行地理编码。
  3. 将生成的坐标传递给 route。

如果用户已经提供坐标,则跳过地理编码。

查找最近的司机

例如:

哪位司机离客户最近?

工作流如下:

geocode × N → table
  1. 对客户所在位置进行地理编码。
  2. 对每位司机的位置进行地理编码。
  3. 按固定顺序保留各地点。
  4. 将客户所在位置设为来源地。
  5. 将司机所在位置设为目的地。
  6. 比较返回的距离或行程时间。
规划多辆车的路线

例如:

我有两辆货车和六位客户。请将客户分配给货车并确定停靠顺序。

工作流如下:

geocode × N → optimize
  1. 对每辆车的起点/终点位置进行地理编码。
  2. 对每项任务的位置进行地理编码。
  3. 为每辆车创建一个车辆条目。
  4. 为每位客户创建一个任务条目。
  5. 调用 optimize。
  6. 读取 routes[].steps,确定每辆车的行程安排。
  7. 检查 unassigned,查看哪些任务无法执行。

坐标格式

所有路径规划工具均使用:

longitude,latitude

例如:

103.8198,1.3521

这是:

longitude = 103.8198
latitude  = 1.3521

请勿颠倒顺序。


Claude

将 JustRouting MCP 添加到 Claude MCP 配置中:

{
  "mcpServers": {
    "justrouting": {
      "command": "justrouting-mcp",
      "env": {
        "JUSTROUTING_API_KEY": "your-api-key"
      }
    }
  }
}

连接后,Claude 即可直接使用 JustRouting 工具。


Cursor

将 JustRouting MCP 添加到 Cursor MCP 配置中:

{
  "mcpServers": {
    "justrouting": {
      "command": "justrouting-mcp",
      "env": {
        "JUSTROUTING_API_KEY": "your-api-key"
      }
    }
  }
}

连接后,Cursor 即可直接使用 JustRouting 工具。


要求

使用预构建二进制文件:

  • JustRouting API 密钥

从源代码安装:

  • Go 1.25+

MCP 服务目前使用 stdio 传输方式。


开发

克隆代码仓库:

git clone https://github.com/justrouting/mcp.git
cd mcp

安装依赖项:

go mod download

运行测试:

go test ./...

构建:

go build -o justrouting-mcp ./cmd/justrouting-mcp

运行:

JUSTROUTING_API_KEY="YOUR-API-KEY" ./justrouting-mcp

架构

┌─────────────────────────────┐
│      MCP Client             │
│   Claude / Cursor / AI      │
└──────────────┬──────────────┘
               │
               │ MCP / stdio
               ▼
┌─────────────────────────────┐
│       justrouting-mcp       │
│                             │
│  geocode   route            │
│  table     optimize         │
└──────────────┬──────────────┘
               │
               │ Official Go Client
               ▼
┌─────────────────────────────┐
│    api.justrouting.tech     │
└─────────────────────────────┘

MCP 服务刻意保持轻量。

它通过 MCP 提供 JustRouting 功能,并使用官方的 JustRouting Go 客户端进行 API 通信。


发布版本

预构建二进制文件通过 GitHub Releases 发布。

创建发布版本:

git tag v0.1.0
git push origin v0.1.0

GitHub Actions 会构建二进制文件并发布该版本。

单行安装程序始终安装最新版本。


路线图

核心路径规划功能已可用:

  • 路径规划计算
  • 地理编码
  • 距离和行程时间矩阵
  • 车辆路径优化

未来的改进可能包括:

  • 备选路线
  • 路径点
  • 可流式传输的 HTTP 传输方式
  • 远程 MCP 部署

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。