Google Maps Platform — geocode addresses, validate them, search places, compute routes and matrices, snap GPS traces to roads, and read time zones and elevation.
Google Maps Platform ships in the w6w first-party pack. It declares 15 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.google-mapsGoogle Maps Platform brings geocoding, place search and routing into a workflow — turn an address into coordinates and back, validate an address before shipping to it, search or autocomplete places, compute a route or an origin-to-destination matrix, snap a GPS trace onto real roads, and read the time zone or elevation at a point.
Every action here is a read: nothing writes to a map or a place, so it’s safe to point at any workflow that needs location context rather than location management. Route computation accounts for live traffic by default, a nearby place search reports when it hit its result cap rather than silently returning a partial answer, and address validation reports exactly what Google corrected so a workflow can decide whether to trust the fix.
It fits logistics, delivery, field-service and lead-qualification workflows that need to resolve, verify or measure a location as one step among several — geocode a form submission, validate a shipping address, or compute drive time between two points — on a single Google Cloud API key shared across the whole Maps Platform surface.
Three routes to the same 15 actions. The Workflow tab is generated from Google Maps Platform's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
address-validate Whether an address is real and deliverable, and WHAT GOOGLE CHANGED to make it so — the question `geocode` cannot answer, because geocoding a wrong address returns a right-looking one.
elevation-get Height above sea level for points, or sampled along a path. Every result carries the RESOLUTION of the underlying model, which is often hundreds of metres.
geocode Address to coordinates. An address that does not exist is a SUCCESS with no results, and a guessed match comes back looking like a real one — both are surfaced.
geocode-reverse Coordinates to addresses. Returns the whole containing stack — street, city, county, country — most specific first, so `resultType` is how you ask for the one you want.
geolocate Where a device is, from the cell towers and wifi around it. Google answers HTTP 404 when it cannot tell — that is 'not enough signal', not a broken URL, and it is reported as such.
place-autocomplete Predictions for a partial string. Pass the SAME session token on every keystroke and on the closing `place-get`, or Google bills each keystroke separately.
place-get Details for one place id. The field mask here takes NO `places.` prefix — a mask copied from a search action fails with a message about an unknown field.
place-photo Resolve a photo reference into a URL. The URL EXPIRES — store the photo name and re-resolve it, never the URL itself.
place-search-nearby Places of a given type within a circle. The circle EXCLUDES everything outside it, and the cap of 20 results has no paging — twenty is the whole answer.
place-search-text Text search over Places. The field mask is REQUIRED and decides the billing tier — the default here is deliberately cheap, and the tier is logged on every call.
roads-nearest The closest road to each point, treated INDEPENDENTLY — no order and no journey, which is what separates this from `roads-snap`. Points with no road nearby are simply absent.
roads-snap Pull a GPS trace onto real roads. Capped at 100 points per request — this refuses more rather than truncating, because a silently shortened route looks perfectly plausible.
route-compute A route between two points. Durations come back as strings like `1234s` and are parsed here; the traffic model is an explicit choice, because it changes the answer.
route-matrix Distances and durations for every origin/destination pair. An individual pair can FAIL inside a successful response — the failures are counted and returned rather than left absent.
timezone-get The time zone at a point, and its offset AT A GIVEN MOMENT — the offset depends on the date, so asking about 'now' when the question is about next winter is off by an hour.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Google Maps Platform's real ids.
{
"manifestVersion": "2",
"name": "google-maps-example",
"steps": [
{
"id": "address-validate",
"uses": {
"app": "io.w6w.google-maps",
"action": "address-validate",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"addressLines": "<addressLines>"
}
}
]
}address-validate elevation-get geocode geocode-reverse geolocate +10 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Google Maps Platform, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Google Maps Platform. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "address-validate",
payload: {
addressLines: "<value>",
// regionCode: "<value>",
// locality: "<value>",
// administrativeArea: "<value>",
// postalCode: "<value>",
// enableUspsCass: "<value>",
// previousResponseId: "<value>",
// languageCode: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action address-validate --payload '{"addressLines":"<value>"}' Give an AI agent Google Maps Platform — without giving it Google Maps Platform's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.google-maps#address-validate",
"input": {
"addressLines": "<addressLines>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Google Maps Platform connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Google Maps Platform's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Google Maps Platform itself is MIT, and the runtime that executes it is source-available (FSL).
Google Maps Platform declares its own checks, so its health is a property of the app rather than something the host guesses at.
Open incidents from the Maps Platform status feed. It covers the whole platform, and this check cannot know which APIs a connection calls — so it names the affected services and stays informational.
Which Maps APIs this key can reach. Each one is enabled separately on the Cloud project, so a key that geocodes proves nothing about Places or Routes — and a disabled API fails in production with an error that reads like a bad request.