pingpoint について
pingpointは、貨物輸送チームやAIエージェント向けのMCPサーバーで、トラックの積荷を作成し、GPS位置、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 エージェントにトラックのリアルタイム GPS 位置を提供する MCP サーバーです。貨物ロードを作成すると、PingPoint がドライバーにアプリへのリンクをテキストメッセージで送信します(登録は約 1 分で完了し、ELD プロバイダーも法人アカウントも年間契約も不要です)。その後、リアルタイムの位置、GPS の軌跡、停車履歴、到着予定時刻を確認し、不要になったロードをキャンセルできます。
まだアカウントをお持ちでない場合は、https://pingpoint.suverse.io/docs/#sandbox で公開されているサンドボックスキーをご利用ください。同じエンドポイントを使え、サインアップ不要で、ロードは約 20 分で全工程を自動的に進みます。キーを使わずに、Arc、Base、Solana のウォレットから USDC で呼び出しごとに支払うこともできます。
インストール
Claude Code の場合は、次の 1 行です。
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 対応のエージェントであれば、どれでも同じように動作します)。
{
"mcpServers": {
"pingpoint": {
"command": "npx",
"args": ["-y", "@suverselabs/pingpoint-mcp"],
"env": {
"PINGPOINT_AGENT_KEY": "sup_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 点)、到着/出発のタイムスタンプ付き停車地、走行距離、定刻到着フラグ、停車時間、到着予定時刻の情報 | $0.02 |
get_trip_stats | GPS による走行全体の走行後サマリーを取得します(DELIVERED 状態のロードが最適です) | 距離、所要時間、平均/最高速度、急加速/急ブレーキの回数、市街地/高速道路/駐車中/夜間の割合、GPS カバレッジ、最初/最後の位置情報を含む stats | $0.02 |
cancel_load | ロードをキャンセルします。ステータスは CANCELLED になり、追跡は停止します。データは削除されず、返金もありません | { ok, loadNumber, previousStatus, status, cancelledAt, trackingEndedAt } | 無料 |
update_load_status | API の一部ではありません。ステータスは GPS で検証されます。詳しくは下記をご覧ください | HTTP 501 OPERATION_NOT_AVAILABLE | — |
get_pricing | エージェント操作の現在の USD 価格表を取得します | { currency, prices } | 無料 |
get_balance | ロードの作成と位置情報の取得に使われるプリペイド残高を取得します | { currency, balanceUsd } | 無料 |
update_load_status が 501 を返す理由。 PingPoint は、ドライバーの GPS とジオフェンスイベントに基づいてロードのステータスを自動更新するため、外部からステータスを書き込む機能はありません。これはデータ整合性を保証するものと考えてください。取得したステータスは誰かが手動で設定したものではなく、実際に記録された位置情報に基づいています。このツールは、エージェントが呼び出した場合に不明なエラーではなく明確な回答を返すためだけに残されています。同様に、配達確認はベンダーの操作ではなく運送業者側のフローで行います。運送業者が Telegram 経由で BOL を提出します。
停車地。 ロードには集荷地が 1~2 か所、配達先が 1~3 か所設定できます。配列の順序が停車順です。各停車地には、任意の時間枠として date(開始)と dateTo(終了)を指定できます。onTime は最後の配達先の dateTo を基準に判定されるため、これを指定しない場合、このフィールドは null のままです。停車地はロードの作成時に確定し、停車地を追加するツールはありません。
ロードの作成に必須なのは、driverPhone(E.164 形式。ドライバー用アプリのリンクがこの番号に送信されます)と、pickups および deliveries の配列です。すべての停車地に address、city、state、zip が必要です。それ以外はすべて任意です。customerRef は重複排除キーとしても機能します。リトライ時に同じ idempotencyKey を渡すと、残高への請求は最大 1 回に抑えられます。
例 — 「荷物は今どこにありますか?」
get_load_position に { "loadNumber": "LD-2026-042317" } を指定すると、次の結果が返されます。
{
"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 状態の荷物について、get_trip_stats に { "loadNumber": "LD-2026-648319" } を指定すると、次の結果が返されます。
{
"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"
}
}
距離の単位はマイル、速度の単位は mph、割合は 0~100、タイムスタンプは UTC です。
ドライバーは実際に位置情報を共有していますか?
get_load_position の結果に含まれる driverTracking は、PingPoint の管理画面に表示されるものと同じ用語です。そのため、エージェントは空のトラック情報から推測することなく、位置情報が届かない理由を説明できます。
driverTracking | 意味 | 確認する項目 |
|---|---|---|
NOT_BOUND | ドライバーがアプリでリンクを一度も開いていません | inviteSentAt(SMS は送信済みか)、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。最後の 2 つは LATE/NO_SIGNAL/LONG_DWELL 用)は、MCP ツールではなく管理画面で設定します:https://pingpoint.suverse.io/docs/webhooks
USDC による呼び出しごとの支払い
アカウントもキーも不要です。サーバーにウォレットを指定すると、有料のツール呼び出しごとに x402(HTTP 402 + 署名済み USDC 送金)を通じて、そのウォレットから決済されます。PingPoint のリレイヤーが送金を送信してガス代を負担し、サーバーは署名するだけです。PINGPOINT_NETWORK でチェーンを選択します。
PINGPOINT_NETWORK | キーファイルの内容 | USDC |
|---|---|---|
arc-mainnet | EVM 秘密鍵。0x + 64 桁の 16 進数 | Arc 上の USDC 0x3600…0000 |
arc-testnet(デフォルト) | EVM 秘密鍵。0x + 64 桁の 16 進数 | Arc テストネットの USDC 0x3600…0000(フォーセット) |
base-mainnet | EVM 秘密鍵。0x + 64 桁の 16 進数 | 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 のリレイヤーがトランザクション手数料を負担します。有料の結果には、トランザクションハッシュ(EVM)または署名(Solana)とエクスプローラーへのリンクを含む payment ブロックが付属します。
{ "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 件。1 時間以内に別のウォレットで使用されたドライバーの電話番号は拒否されます |
get_load_position | 呼び出しごとに 0.02 | このウォレットが作成したロードのみが対象です(別のウォレットのロードの場合は 403) |
get_trip_stats | 呼び出しごとに 0.02 | 同じ所有権ルールが適用されます |
cancel_load | 無料 | ゼロ値の署名で所有権を証明するため、トランザクションは発生しません |
get_pricing | 無料 | サーバーの 402 オファーを読み取るだけで、署名は行いません |
get_balance | 無料 | ウォレットの USDC を RPC で 1 回読み取ります(ERC-20 の balanceOf または Solana のトークンアカウント)。PINGPOINT_RPC_URL でパブリック RPC を上書きできます |
拒否された呼び出し(403、404、429、入力値が無効、PaymentFailed INSUFFICIENT_BALANCE、503 X402_RELAYER_LOW_GAS)では料金は発生しません。決済前に所有権、上限、残高、リレイヤーのガス代が確認されます。EVM のオファーは 300 秒間有効で、署名ごとに一度限りのノンスが付与されます。Solana のトランザクションはブロックハッシュが有効な間(約 1 分間)有効です。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 桁の 16 進数。Solana:solana-keygen の JSON 配列(64 バイト)または base58。 |
PINGPOINT_NETWORK | ウォレットモード:arc-testnet(デフォルト)、arc-mainnet、base-mainnet、または solana-mainnet。 |
PINGPOINT_RPC_URL | ウォレットモードで任意です。get_balance(および Solana では、すべての支払いに必要なブロックハッシュの読み取り)に使用する、そのチェーンの JSON-RPC URL です。デフォルトでは公開 RPC を使用しますが、レート制限があります。 |
PINGPOINT_HTTP_PORT | 任意のセルフホスト設定です。stdio の代わりに、このポートの POST /mcp で Streamable HTTP を提供します(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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。