# Park Graph

> Find, price and book parking at Park Graph lots: search, quote, hold and session tools.

- name: com.parkgraph/mcp
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 85/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.parkgraph%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/com.parkgraph%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "parkgraph": {
      "type": "http",
      "url": "https://parkgraph.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ${PARKGRAPH_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${PARKGRAPH_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-6d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 2 of 6 tools declare all four hints; missing: get_lot (idempotentHint); search_lots (idempotentHint); quote (idempotentHint); …
- pass `tools.token_cost`: about 1,698 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 5 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know parkgraph-mcp@0.1.0

- tools: 6, about 1,698 tokens to load them all
- tool set hash: 884f2f52ddebd69c325d24add51b1e85
- tools last changed: 2026-10-19T06:08:37.137Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.parkgraph/mcp.svg)](https://protogrid.dev/servers/com.parkgraph/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `extend_session` changed (annotations)
- 2026-10-19 `get_session` changed (annotations)
- 2026-10-19 `reserve` changed (annotations)
- 2026-10-19 `quote` changed (annotations)
- 2026-10-19 `get_lot` changed (annotations)
- 2026-10-19 `search_lots` changed (annotations)
- 2026-10-17 `reserve` changed (inputSchema)
- 2026-10-16 `extend_session` changed (description, inputSchema) **meaning changed**
  - before: Add time to an active parking session on your account. Needs an API key with sessions:write.
  - after: Add time to an active hourly parking session. No API key needed: ask the driver for the phone code on their receipt or pass, the last 3 characters of their plate, and how many hours to add (0.5 to 8, in half-hour steps). The answer is the price, the new end time and a pay_url to the driver's session page: send the driver there to pay. Nothing is charged and the end time doesn't move until they pay. Any mismatch gets one answer, SESSION_NOT_FOUND. With an API key (sessions:write), session_id and session_code extend the session through the API.
- 2026-10-16 `get_session` changed (description, inputSchema) **meaning changed**
  - before: Status, times and charges for a parking session on your account. Needs an API key with sessions:read.
  - after: Check a parking session: lot, status, start and end times, rate, amount so far and extensions, with a link to the driver's session page. No API key needed: ask the driver for the 6-character phone code on their receipt or pass and the last 3 characters of their plate (session_id with session_code also works). Any mismatch gets one answer, SESSION_NOT_FOUND: ask the driver to check both. With an API key (sessions:read), session_id alone reads a session on your account.
- 2026-10-16 `reserve` changed (description, inputSchema)
  - before: Place a short hold on space at a lot (POST /api/v1/reserve rules). Lots on the Starter plan don't take agent bookings: you get status pay_at_qr_page and a pay_url to give the driver. Confirm a hold with POST /api/v1/reserve/confirm before it expires.
  - after: Hold space at a lot for the driver for a few minutes (POST /api/v1/reserve rules). No API key needed. Ask the driver to confirm before calling it. Lots that take payment at their QR page place no hold: you get status pay_at_qr_page and a pay_url to give the driver. A hold is confirmed with POST /api/v1/reserve/confirm before it expires.

Full history: https://api.protogrid.dev/v1/servers/com.parkgraph%2Fmcp/changes

## Dependencies

- npm parkgraph-mcp@0.1.0: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://parkgraph.com/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm parkgraph-mcp@0.1.0 secrets: PARKGRAPH_API_KEY

## Tools (6)

- `extend_session`: Add time to an active hourly parking session. No API key needed: ask the driver for the phone code on their receipt or pass, the last 3 characters of their plate, and how many hours to add (0.5 to 8, in half-hour steps). The answer is the price, the new end time and a pay_url to the driver's session page: send the driver there to pay. Nothing is charged and the end time doesn't move until they pay. Any mismatch gets one answer, SESSION_NOT_FOUND. With an API key (sessions:write), session_id and session_code extend the session through the API.
- `get_lot`: Full public details for one lot: address, coordinates, spaces, features, hours, pricing and spaces left right now. No API key needed.
- `get_session`: Check a parking session: lot, status, start and end times, rate, amount so far and extensions, with a link to the driver's session page. No API key needed: ask the driver for the 6-character phone code on their receipt or pass and the last 3 characters of their plate (session_id with session_code also works). Any mismatch gets one answer, SESSION_NOT_FOUND: ask the driver to check both. With an API key (sessions:read), session_id alone reads a session on your account.
- `quote`: Price to park at a lot for a number of hours, at the lot's current rate (daily max applied). No API key needed. booking.mode says what comes next: reserve (call reserve to hold a space) or pay_at_qr_page (give the driver booking.pay_url, where they pay and park).
- `reserve`: Hold space at a lot for the driver for a few minutes (POST /api/v1/reserve rules). No API key needed. Ask the driver to confirm before calling it. Lots that take payment at their QR page place no hold: you get status pay_at_qr_page and a pay_url to give the driver. A hold is confirmed with POST /api/v1/reserve/confirm before it expires.
- `search_lots`: Find Park Graph parking lots near a place, nearest first, with spaces left and the current rate. No API key needed. Ask the driver where they're going and work out its latitude and longitude first. Each lot's id is what quote, get_lot and reserve take. The top-level summary is a one-line answer you can quote. An empty list means Park Graph has no lots near that point: say so, and never make up lots.
