MCP server wrapper for the KLO Mobility Quote A2A agent.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file klo_mobility_quote_mcp-1.0.0.tar.gz.
File metadata
- Download URL: klo_mobility_quote_mcp-1.0.0.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e51c6baf35d23ae5162ef20d7d53714577df8d13a36885bf9f667cc20210630a
|
|
| MD5 |
ae47725a0fd58a0d596566c216b1fe49
|
|
| BLAKE2b-256 |
75d2d1d1c2a3e99974d0ac4c6ea353a37d3193268fb1f5647680bf747db50c37
|
File details
Details for the file klo_mobility_quote_mcp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: klo_mobility_quote_mcp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b131f5794a39cc0918325e8d7f37a11c805da64859c210d7d36be77df3222dd5
|
|
| MD5 |
65d2fed72584057f2d81b5724890bdc3
|
|
| BLAKE2b-256 |
fb7a8559e5e2f52ef654e632bd67cad3c5b42c19f5a7b50c814c3623b7e6d2c1
|