Mobility Quote Agent
Provider-agnostic A2A agent for mobility quote/discovery. It exposes one skill,
get_quote, over JSON-RPC and returns route options sorted by estimated cost.
The first real provider path is SkedGo / TripGo. It is self-serve and useful for multimodal route discovery; booking/payment remains a future provider-specific integration.
The no-key production fallback is Estimated Taxi: it estimates distance, ETA,
and fare from a transparent local formula. This is not a live provider price and
must be labelled as an estimate.
Human-readable address input is resolved to coordinates with OpenStreetMap Nominatim before providers run. Coordinate input still works directly. The agent also returns a no-price Yandex Go route launcher when coordinates are available. This is a deeplink, not a Yandex price quote or comparison result.
Payment metadata is advertised through the Agent Card and /payment-info.
The current default price is 0.001 USDC per quote on Base, paid to
0x55CFe1Dd5d341e5f9D57ADf26f98c8E8727bb3C2. Facilitator-backed verify/settle
is wired through OpenX402. Full x402 enforcement is off by default until a live
paid request is tested.
Files
a2a-quote-agent/
server.py A2A server: Agent Card + JSON-RPC message/send
agent_card.py Builds /.well-known/agent-card.json
payments.py x402/Base USDC payment metadata helpers
client_test.py Discovery + JSON-RPC smoke test
MARKETPLACE-LISTING.md Draft listing for A2A/OpenClaw marketplaces
providers/
__init__.py Provider registry
base.py Provider/Quote contract
estimate.py No-key coordinate fare estimator
mock.py Demo providers
geocode.py No-key address-to-coordinate resolver
tripgo.py Live SkedGo/TripGo adapter
yandex.py No-price Yandex Go deeplink builder
Run locally
cd C:\agent\a2a-quote-agent
python server.py 8080
python client_test.py
Agent Card:
http://localhost:8080/.well-known/agent-card.json
Enable TripGo
Get a self-serve key from SkedGo / TripGo, then run:
$env:TRIPGO_API_KEY="YOUR_KEY"
$env:PUBLIC_BASE_URL="http://localhost:8080"
python server.py 8080
TripGo v1 in this agent expects coordinate input:
quote from 25.1972,55.2744 to 25.2532,55.3657
The server can also resolve normal addresses before calling providers:
quote from Dubai Mall to DXB Airport
Resolved coordinates are returned in resolved_route. Address geocoding uses
OpenStreetMap Nominatim as a no-key MVP layer; for heavier production traffic,
configure Google, TomTom, HERE, or a self-hosted geocoder later.
Coordinate routes and successfully resolved address routes enable
route_launchers[] with an "Open in Yandex Go" deeplink.
Mock providers stay enabled by default for demos and health checks. To run only live providers:
$env:INCLUDE_MOCK_PROVIDERS="0"
Payment metadata
The server advertises x402-compatible payment terms without requiring a private key:
$env:PAYMENT_RECEIVE_ADDRESS="0x55CFe1Dd5d341e5f9D57ADf26f98c8E8727bb3C2"
$env:X402_PRICE_USDC="0.001"
$env:X402_ADVERTISE="1"
$env:X402_ENFORCE="0"
$env:X402_FACILITATOR_URL="https://facilitator.openx402.ai"
python server.py 8080
Discovery endpoints:
/.well-known/agent-card.json
/payment-info
/.well-known/payment-info.json
/x402/payment-required
/x402/payment-required returns HTTP 402 with a PAYMENT-REQUIRED header that
contains Base64-encoded JSON payment terms. When a paid client retries the JSON
RPC endpoint with a PAYMENT-SIGNATURE header, the server posts the payment
payload and selected requirements to the facilitator /verify, performs the
quote, then posts to /settle and returns PAYMENT-RESPONSE on success.
Keep X402_ENFORCE=0 until a live paid request is tested. With enforcement off,
free quote smoke tests continue to work, while paid clients can still submit
PAYMENT-SIGNATURE and settle.
With mocks disabled and no live provider configured, coordinate routes still return an estimated fare plus route launchers:
$env:INCLUDE_MOCK_PROVIDERS="0"
python server.py 8080
python test_yandex_launcher.py
That mode is the clean no-approval MVP: transparent estimated fare, no displayed Yandex price, no competitor price comparison, and an "Open in Yandex Go" route deeplink where supported.
Publish checklist
- Put the server behind public HTTPS.
- Set
PUBLIC_BASE_URL=https://212-47-77-33.sslip.io. - Verify
https://212-47-77-33.sslip.io/.well-known/agent-card.json. - Run
python client_test.py https://212-47-77-33.sslip.io. - Use
MARKETPLACE-LISTING.mdfor A2A/OpenClaw marketplace submission.
Release files for klo-mobility-quote-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| klo_mobility_quote_mcp-1.0.0.tar.gz | 5.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| klo_mobility_quote_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 11.6 kB
Release files / klo_mobility_quote_mcp-1.0.0.tar.gz
| Download URL | klo_mobility_quote_mcp-1.0.0.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e51c6baf35d23ae5162ef20d7d53714577df8d13a36885bf9f667cc20210630a
|
|
BLAKE2b-256 checksum How to use checksums |
75d2d1d1c2a3e99974d0ac4c6ea353a37d3193268fb1f5647680bf747db50c37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|
Release files / klo_mobility_quote_mcp-1.0.0-py3-none-any.whl
| Download URL | klo_mobility_quote_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 5.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b131f5794a39cc0918325e8d7f37a11c805da64859c210d7d36be77df3222dd5
|
|
BLAKE2b-256 checksum How to use checksums |
fb7a8559e5e2f52ef654e632bd67cad3c5b42c19f5a7b50c814c3623b7e6d2c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.10
|