关于 pingpoint
pingpoint 是面向货运运营和 AI Agent 的卡车 GPS 跟踪 MCP 服务,可创建货运任务并读取实时位置、ETA 与行程统计。它还支持按调用使用 USDC 结算。
主要功能
- 01创建含多个停靠点的货运任务
- 02查询实时位置、GPS 轨迹和 ETA
- 03查看司机定位共享状态
- 04获取行程距离、时长和速度统计
- 05取消任务并查询价格或余额
适用场景
- 01创建任务并向司机发送跟踪链接
- 02检查在途卡车位置及预计到达时间
- 03交付后查看完整行程统计
MCP 相关
向 MCP 客户端提供货运任务创建、位置查询、行程统计、取消及价格和余额查询工具。支持本地 stdio 运行,也提供托管 Streamable HTTP 端点。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @suverselabs/pingpoint-mcpPINGPOINT_AGENT_KEY密钥PingPoint Agent API key (sup_agent_...), issued in the cabinet: Integrations -> Agent API. Either this or PINGPOINT_WALLET_KEY_FILE.PINGPOINT_WALLET_KEY_FILE密钥Pay per call with USDC (x402) instead of a key: path to a file holding the wallet key - EVM private key (0x + 64 hex) for arc-mainnet/arc-testnet/base-mainnet, solana-keygen JSON or base58 secret for solana-mainnet. Either this or PINGPOINT_AGENT_KEY.PINGPOINT_NETWORKNetwork for wallet mode: arc-testnet (default), arc-mainnet, base-mainnet or solana-mainnetPINGPOINT_BASE_URLOverride for the PingPoint API base URL (default https://api.suverse.io with a key, https://pingpoint.suverse.io with a wallet)PINGPOINT_RPC_URLWallet mode only: JSON-RPC URL of the chosen chain for get_balance and, on Solana, the blockhash read each payment needs (default: the public RPC, which rate-limits)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@suverselabs/pingpoint-mcp
为 AI Agent 提供实时卡车 GPS 位置的 MCP 服务:创建货运订单后,PingPoint 会向司机发送包含应用链接的短信(约一分钟即可完成注册——无需 ELD 提供商、企业账户或年度合同),之后即可读取实时位置、GPS 轨迹、停靠点时间线和预计到达时间(ETA),并取消不再需要的订单。
还没有账户?https://pingpoint.suverse.io/docs/#sandbox 上提供了沙盒密钥:接口相同,无需注册,订单会在约 20 分钟内自动完成整个流程。也可以完全跳过密钥,通过 Arc、Base 或 Solana 钱包使用 USDC 按次付费。
安装
Claude Code,只需一行:
claude mcp add pingpoint --env PINGPOINT_AGENT_KEY=sup_agent_… -- npx -y @suverselabs/pingpoint-mcp
或者添加到 MCP 配置中(Claude Desktop:claude_desktop_config.json;Claude Code:.mcp.json;任何支持 MCP 的 Agent 都可以采用相同方式):
{
"mcpServers": {
"pingpoint": {
"command": "npx",
"args": ["-y", "@suverselabs/pingpoint-mcp"],
"env": {
"PINGPOINT_AGENT_KEY": "sup_agent_…"
}
}
}
}
重启 Agent 后即可看到这些工具。
托管端点(无需安装)
支持 MCP Streamable HTTP 的客户端可以直接连接到
https://pingpoint.suverse.io/mcp
Authorization: Bearer sup_agent_…
Claude Code:claude mcp add --transport http pingpoint https://pingpoint.suverse.io/mcp --header "Authorization: Bearer sup_agent_…"。
该服务是无状态的,不保存任何凭据:每个请求都使用其携带的密钥执行。无需密钥即可列出工具;不带密钥调用工具会返回 HTTP 401。工具相同,价格相同。钱包模式(使用 USDC 按次付费)仅在自行运行此软件包时可用。
工具
| 工具 | 功能 | 返回内容 | 价格 |
|---|---|---|---|
create_load | 创建货运订单(支持多个停靠点);PingPoint 会向 driverPhone 发送包含司机应用链接的短信 | loadNumber、公开的 trackingLink、司机网页/应用链接、去重标记 | $0.65 |
get_load_position | 按订单编号获取订单实时状态 | 状态、司机跟踪状态(driverTracking),包含邀请/打开/拒绝时间戳、GPS 轨迹(最近 500 个点)、包含到达/离开时间戳的停靠点、已行驶距离、准时标记、停留时间、ETA 信息块 | $0.02 |
get_trip_stats | 汇总整个 GPS 行程的行程后数据(最适用于状态为 DELIVERED 的订单) | stats,包含距离、时长、平均/最高速度、急加速/急刹车次数、市区/高速/停车/夜间占比、GPS 覆盖率、首次/最后一次定位时间 | $0.02 |
cancel_load | 取消订单:状态变为 CANCELLED,停止跟踪,不删除任何内容,也不退款 | { ok, loadNumber, previousStatus, status, cancelledAt, trackingEndedAt } | 免费 |
update_load_status | API 不支持此操作——状态由 GPS 验证,见下文 | HTTP 501 OPERATION_NOT_AVAILABLE | — |
get_pricing | Agent 操作当前的美元价格列表 | { currency, prices } | 免费 |
get_balance | 用于支付创建订单和读取位置费用的预付余额 | { currency, balanceUsd } | 免费 |
为什么 update_load_status 会返回 501。 PingPoint 会根据司机 GPS 和地理围栏事件自行更新订单状态,因此不支持外部状态写入。这可视为数据完整性保证:读取到的状态从未由任何人手动设置,而是基于实际记录的位置。保留此工具只是为了让尝试调用它的 Agent 得到明确答复,而不是一头雾水。同样,确认交付也不属于服务商操作——这由承运商流程负责,承运商会通过 Telegram 提交 BOL。
停靠点。 一个订单包含 1–2 个提货点和 1–3 个送货点;数组顺序即停靠顺序。每个停靠点可设置时间窗口:date(开始时间)和 dateTo(结束时间)。onTime 根据最后一个送货点的 dateTo 计算;若未设置该字段,onTime 将保持为 null。订单创建后停靠点即固定——没有添加停靠点的工具。
创建订单时必填:driverPhone(E.164 格式——司机应用链接会发送至该号码)以及 pickups 和 deliveries 数组;每个停靠点都必须包含 address、city、state、zip。其他内容均为可选项。customerRef 也可用作去重键;重试时传入相同的 idempotencyKey,即可确保余额最多只扣除一次。
示例 —“我的货物在哪里?”
使用 { "loadNumber": "LD-2026-042317" } 调用 get_load_position 会返回:
{
"loadNumber": "LD-2026-042317",
"pingpointLoadId": "6f1c2d3e-8a45-4b9c-9d10-2e5f7a8b9c01",
"status": "IN_TRANSIT",
"createdAt": "2026-08-18T14:02:11.000Z",
"deliveredAt": null,
"driverTracking": "REPORTING",
"inviteSentAt": "2026-08-18T14:02:12.000Z",
"linkOpenedAt": null,
"declinedAt": null,
"distanceMiles": 412.7,
"onTime": null,
"delayMinutes": null,
"pickupDwellMinutes": 38,
"deliveryDwellMinutes": null,
"stops": [
{ "type": "PICKUP", "sequence": 1, "city": "Claremore", "state": "OK",
"windowFrom": "2026-08-18T15:00:00.000Z", "windowTo": "2026-08-18T19:00:00.000Z",
"arrivedAt": "2026-08-18T15:47:31.000Z", "departedAt": "2026-08-18T16:25:09.000Z" },
{ "type": "DELIVERY", "sequence": 2, "city": "Charlotte", "state": "NC",
"windowFrom": "2026-08-20T12:00:00.000Z", "windowTo": "2026-08-20T16:00:00.000Z",
"arrivedAt": null, "departedAt": null }
],
"gpsTrack": [
{ "lat": 36.3126, "lng": -95.6161, "speed": null, "heading": null, "ts": "2026-08-18T16:25:09.000Z" },
{ "lat": 35.4676, "lng": -94.3579, "speed": null, "heading": null, "ts": "2026-08-18T18:55:42.000Z" }
],
"pingCount": 214,
"eta": {
"nextStop": { "type": "DELIVERY", "sequence": 2, "city": "Charlotte", "state": "NC" },
"receivingWindow": { "from": "2026-08-20T12:00:00.000Z", "to": "2026-08-20T16:00:00.000Z" },
"distanceToNextStopMi": 611.4,
"driveTimeHours": 11.2,
"moving": true,
"stoppedForMinutes": null,
"etaWindow": { "from": "2026-08-20T13:05:00.000Z", "to": "2026-08-20T15:40:00.000Z" },
"tracking": { "state": "pinging", "noDataForMinutes": null },
"reason": null
}
}
(此处缩短了 gpsTrack;API 最多返回最近 500 个点。)
示例 —“这趟行程怎么样?”
get_load_position 回答“卡车现在在哪里”;get_trip_stats 回答“这趟已完成的行程怎么样”。对于状态为 DELIVERED 的货物,使用 { "loadNumber": "LD-2026-648319" } 调用 get_trip_stats 会返回:
{
"loadNumber": "LD-2026-648319",
"loadId": "927741bc-dfd0-41ba-9e99-5c5031c756f9",
"stats": {
"dataPoints": 4785,
"durationSeconds": 69329,
"estimatedDistanceMiles": 486.591,
"avgSpeedMph": 25.27,
"maxSpeedMph": 88.22,
"hardAccelCount": 280,
"hardBrakeCount": 168,
"cityMilesPct": 9.96,
"highwayMilesPct": 88.65,
"parkedTimePct": 53.65,
"nightPct": 44.7,
"coveragePct": 100,
"firstAt": "2026-08-18T16:53:25.000Z",
"lastAt": "2026-08-19T12:08:54.000Z"
}
}
距离单位为英里,速度单位为英里/小时,百分比范围为 0–100,时间戳为 UTC。
司机真的在共享位置吗?
get_load_position 返回结果中的 driverTracking 与 PingPoint 管理界面显示的词语相同,因此 Agent 无需根据空轨迹猜测,就能解释为什么货物没有位置更新:
driverTracking | 含义 | 查看 |
|---|---|---|
NOT_BOUND | 司机从未在应用中打开链接 | inviteSentAt(是否已发送短信?)、linkOpenedAt(已在浏览器中打开,但未安装应用) |
BOUND_SILENT | 应用已绑定到货物,但尚无位置 | 等待首次位置更新 |
DECLINED | 司机在位置授权屏幕上点了“暂不” | declinedAt;司机同意后会清除 |
REPORTING | 正在接收位置 | gpsTrack、eta |
PAUSED_BY_DRIVER | 司机已在应用中暂停共享 | eta.tracking.state === "driver_paused" |
null 表示货物尚未分配司机。
Webhook
推送通知(pingpoint.load.created、pingpoint.load.updated、pingpoint.status.changed、pingpoint.load.completed、pingpoint.exception.raised、pingpoint.exception.resolved — 后两项用于 LATE / NO_SIGNAL / LONG_DWELL)需在管理界面中配置,不能通过 MCP 工具配置:https://pingpoint.suverse.io/docs/webhooks
使用 USDC 按次付费
无需账户或密钥:将服务指向一个钱包,每次付费工具调用都会通过 x402(HTTP 402 + 已签名的 USDC 转账)从该钱包结算。PingPoint 的中继器会提交转账并支付 Gas;服务只需签名。使用 PINGPOINT_NETWORK 选择链:
PINGPOINT_NETWORK | 密钥文件内容 | USDC |
|---|---|---|
arc-mainnet | EVM 私钥,0x + 64 位十六进制字符 | Arc 上的 USDC 0x3600…0000 |
arc-testnet(默认) | EVM 私钥,0x + 64 位十六进制字符 | Arc 测试网 USDC 0x3600…0000(水龙头) |
base-mainnet | EVM 私钥,0x + 64 位十六进制字符 | Base 上的 Circle USDC 0x8335…2913 |
solana-mainnet | Solana 秘密密钥——由 solana-keygen 写入的 64 字节 JSON 数组,或 base58 | Circle USDC 铸币地址 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
# EVM (Arc testnet / Base)
echo "0x<64 hex private key>" > ~/.pingpoint-wallet.key && chmod 600 ~/.pingpoint-wallet.key
claude mcp add pingpoint --env PINGPOINT_WALLET_KEY_FILE=$HOME/.pingpoint-wallet.key --env PINGPOINT_NETWORK=base-mainnet -- npx -y @suverselabs/pingpoint-mcp
# Solana
solana-keygen new --outfile ~/.pingpoint-wallet.json # or point at an existing keypair file
claude mcp add pingpoint --env PINGPOINT_WALLET_KEY_FILE=$HOME/.pingpoint-wallet.json --env PINGPOINT_NETWORK=solana-mainnet -- npx -y @suverselabs/pingpoint-mcp
{
"mcpServers": {
"pingpoint": {
"command": "npx",
"args": ["-y", "@suverselabs/pingpoint-mcp"],
"env": {
"PINGPOINT_WALLET_KEY_FILE": "/home/me/.pingpoint-wallet.json",
"PINGPOINT_NETWORK": "solana-mainnet",
"PINGPOINT_RPC_URL": "https://<your-solana-rpc>"
}
}
}
}
在该网络的钱包中存入 USDC(询问 get_balance——它会返回地址和余额),然后照常使用工具。在 Solana 上,钱包无需 SOL:PingPoint 的中继器会支付交易费用。付费结果会包含一个 payment 块,其中有交易哈希(EVM)或签名(Solana),以及区块浏览器链接:
{ "loadNumber": "LD-2026-111417", "trackingLink": "https://pingpoint.suverse.io/track/…",
"payment": { "transaction": "0x97f738e3…", "network": "base-mainnet", "payer": "0xE958…dB2E",
"amountUsdc": "0.65", "explorerUrl": "https://basescan.org/tx/0x97f738e3…" } }
| 工具 | 价格(USDC) | 备注 |
|---|---|---|
create_load | 0.65 | 每个钱包和网络:测试网上每 24 小时 2 次,主网上 20 次;一小时内被另一个钱包使用过的司机电话将被拒绝 |
get_load_position | 每次调用 0.02 | 仅限此钱包创建的货载(其他钱包的货载 → 403) |
get_trip_stats | 每次调用 0.02 | 同样遵循所有权规则 |
cancel_load | 免费 | 零金额签名可证明所有权,无需交易 |
get_pricing | 免费 | 读取服务的 402 报价,不签名 |
get_balance | 免费 | 对钱包的 USDC 进行一次 RPC 读取(ERC-20 balanceOf 或 Solana 代币账户);PINGPOINT_RPC_URL 可覆盖公共 RPC |
被拒绝的调用(403、404、429、无效输入、PaymentFailed INSUFFICIENT_BALANCE、503 X402_RELAYER_LOW_GAS)不收费:结算前会检查所有权、限额、余额和中继器的 Gas。EVM 报价有效期为 300 s,每个签名使用一次性 nonce;Solana 交易的有效期与其区块哈希相同(约一分钟)。SDK 会在签名前拒绝超过 1 USDC 或使用其他资产或网络的报价。请妥善保管密钥文件(chmod 600)——钱包只存入当天所需的 USDC 是合理的设置。公共 RPC 端点(Base、Solana)会进行速率限制;如需稳定使用,请将 PINGPOINT_RPC_URL 设置为你的服务提供商。
获取密钥
- 在 pingpoint.suverse.io 注册(电子邮件或 Google/GitHub)。
- 在控制台中打开 Integrations → Agent API,然后点击 Issue key。
sup_agent_…密钥会通过电子邮件发送。PingPoint 不会存储密钥;如果密钥丢失,请从同一页面重新签发。
余额为零时,免费操作仍可使用。付费操作会从预付余额中扣款(在控制台的 Billing 中充值);余额不足以支付调用时,你会收到 402 INSUFFICIENT_FUNDS,且不会产生扣款。
价格
| 操作 | 价格 |
|---|---|
| 创建货载 | $0.65 |
| 读取货载位置 | 每次请求 $0.02 |
| 行程摘要统计 | 每次请求 $0.02 |
| 取消货载 | 免费 |
| 更新货载状态 | 不可用(501) |
| 价格 / 余额 | 免费 |
使用钱包按次付费时,价格同样以 USDC 计价。
环境
| 变量 | 含义 |
|---|---|
PINGPOINT_AGENT_KEY | 你的 sup_agent_… 密钥。此项和 PINGPOINT_WALLET_KEY_FILE 必须且只能设置一项。 |
PINGPOINT_WALLET_KEY_FILE | 保存付款钱包私钥的文件路径 — 使用 USDC 按次付费,而不是使用密钥。EVM 网络:0x + 64 位十六进制数。Solana:solana-keygen JSON 数组(64 字节)或 base58。 |
PINGPOINT_NETWORK | 钱包模式:arc-testnet(默认)、arc-mainnet、base-mainnet 或 solana-mainnet。 |
PINGPOINT_RPC_URL | 钱包模式下可选:该链的 JSON-RPC URL,用于 get_balance(在 Solana 上还用于读取每次付款都需要的区块哈希)。默认使用公共 RPC,该服务会限制请求频率。 |
PINGPOINT_HTTP_PORT | 可选,自托管时使用:在此端口的 POST /mcp 上提供 Streamable HTTP 服务,而不是使用 stdio(PINGPOINT_HTTP_HOST 默认为 127.0.0.1)。客户端发送自己的 Authorization: Bearer 密钥;服务端不得持有自己的密钥或钱包。 |
PINGPOINT_BASE_URL | 可选。使用密钥时默认为 https://api.suverse.io,使用钱包时默认为 https://pingpoint.suverse.io。 |
基于 @suverselabs/pingpoint-sdk 构建 — 使用相同的合约,仅有一种实现。Node ≥ 18。运行时依赖:MCP SDK、zod、viem(EVM 钱包签名和余额读取)以及 @solana/web3.js(Solana 密钥对签名)。
完整 API 文档:https://pingpoint.suverse.io/docs
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。