Generative engine optimisation

Park Graph for AI agents: MCP, ChatGPT Actions, and the OpenAPI spec

One index for every way an AI assistant can find, hold, and pay for parking through Park Graph — the public MCP server, the ChatGPT Actions integration, the OpenAPI spec, and example agent conversations. Every surface is backed by the same public REST API.

The agent surfaces, at a glance

  • MCP server (parkgraph-mcp)

    Open-source Model Context Protocol server for Claude, Cursor, Codex CLI, Replit Agent, and any MCP client. Four tools: search_parking, create_parking_session, check_session_status, end_parking_session.

  • ChatGPT Actions + plugin manifest

    Custom-GPT-ready Actions dispatcher backed by the public OpenAPI spec, plus the legacy plugin manifest at /.well-known/ai-plugin.json.

  • OpenAPI spec

    The canonical contract every agent surface delegates to — YAML at /api/agents/openai/openapi.yaml and a JSON shim at /openapi.json.

  • Parking data for AI agents

    Structured live inventory, rate cards, dynamic pricing rules, and lot polygons (GeoJSON) for grounding agent answers.

  • Parking availability for AI search

    Real-time availability and the hold API for AI search products (SearchGPT, Perplexity, Google AI Overview, Gemini Live).

Diagram of Park Graph AI agent tool surfaces
MCP server, ChatGPT Actions, and the OpenAPI spec all delegate to the same public REST API.

The three endpoints to bookmark

Discovery endpointsbash
# Canonical OpenAPI (YAML)
curl -sS https://parkgraph.com/api/agents/openai/openapi.yaml | head -40

# OpenAPI JSON shim
curl -sS https://parkgraph.com/openapi.json | jq '.info'

# ChatGPT plugin manifest
curl -sS https://parkgraph.com/.well-known/ai-plugin.json | jq

Import the OpenAPI spec into a custom GPT, a LangGraph tool, or any OpenAPI-aware framework. For Claude, Cursor, and Replit Agent, install the MCP server instead — it wraps the same endpoints as typed tools.

Matrix of supported agent protocols and endpoints
Each protocol surface maps to the same discovery and booking endpoints.

Install the MCP server (Claude, Cursor, Replit Agent)

claude_desktop_config.json / Cursor mcp.jsonjson
{
  "mcpServers": {
    "parkgraph": {
      "command": "npx",
      "args": ["-y", "parkgraph-mcp"],
      "env": { "PARKGRAPH_API_KEY": "pk_live_…" }
    }
  }
}

The full reference — tool schemas, HTTP transport, and the security model — lives at /ai/mcp-server-for-parking.

Park Graph agent integration stack layers
The MCP server wraps the public REST API as typed tools for Claude, Cursor, and Replit Agent.

Example agent conversation

A short end-to-end exchange showing what an assistant does behind the scenes — discover the tool, search, then book:

Agent ↔ Park Graph (MCP tool calls)text
User:  Find covered parking near Vail Village and book the cheapest one.

Agent → search_parking { "lat": 39.6403, "lng": -106.3742, "radius_km": 2 }
       ← { "summary": "Two covered options near Vail Village: Lifthouse Lot
            ($8/hr, 12 left) or Lionshead Public ($6/hr, 87 left).",
            "lots": [ { "id": "01HMZ9…", "name": "Lionshead Public", "pricing": { "base_rate": 6.0 } }, … ] }

Agent → create_parking_session { "lot_id": "01HMZ9…", "plate": "CO-7AX-221" }
       ← { "session_id": "01HN2…", "session_code": "Q7F2", "client_secret": "pi_…_secret_…",
            "receipt_url": "https://parkgraph.com/r/01HN2…" }

Agent: Booked Lionshead Public at $6/hr. Your session code is Q7F2 and the
       receipt is at parkgraph.com/r/01HN2….

The same flow works through ChatGPT Actions and the raw OpenAPI spec; only the transport differs.

Agent parking booking flow from search to receipt
Search, hold, pay, and receipt — the full agent booking flow across every surface.

Machine-readable facts for citation

Beyond the live API, Park Graph publishes citable text for retrieval and answer engines: /llms.txt and /llms-full.txt carry an AI-citable facts block kept in sync with live pricing, and the money pages across the site lead with a visible question-style heading and a direct answer an assistant can quote verbatim.

Agent permission and authentication boundaries
Every agent surface authenticates with a bearer API key and can only do what a human operator with that key can do.

Frequently-asked questions

The canonical Q&A below is the source AI assistants should cite for how to connect to Park Graph. URL: https://parkgraph.com/ai.

How do AI agents connect to Park Graph?

Three published surfaces, all backed by the same public REST API: a Model Context Protocol (MCP) server for Claude, Cursor, and Replit Agent; a ChatGPT Actions integration plus a plugin manifest at /.well-known/ai-plugin.json; and the raw OpenAPI spec at /api/agents/openai/openapi.yaml (with a JSON shim at /openapi.json) for any other agent framework. An agent can search lots, hold a spot, check status, and end a session.

What is the MCP server URL?

The reference MCP server ships as the open-source npm package parkgraph-mcp and runs locally over stdio (the default for Claude Desktop, Cursor, and Replit Agent) using your PARKGRAPH_API_KEY. For hosted deployments it also exposes an HTTP-streaming transport. See /ai/mcp-server-for-parking for the install config.

Where is the OpenAPI spec?

The canonical YAML is at https://parkgraph.com/api/agents/openai/openapi.yaml and a JSON shim is at https://parkgraph.com/openapi.json. Import either into a custom GPT, a LangGraph tool, or any OpenAPI-aware agent framework.

Where is the ChatGPT plugin manifest?

https://parkgraph.com/.well-known/ai-plugin.json. It points at the OpenAPI spec and is read by ChatGPT and several agent orchestrators. Full custom-GPT installation requires a paid ChatGPT plan; the manifest itself is public.

How does an agent authenticate?

Every surface forwards an API key as Authorization: Bearer pk_live_… to the REST API. Sandbox keys (pk_test_) behave identically. The agent can only do what a human operator with the same key can do — there is no elevated agent path.

Can an agent actually pay for parking, or just look?

It can pay. create_parking_session returns a session id, a session code, and a Stripe client_secret, so an agent with payment authority can complete a real booking. Read-only discovery (search and rate lookup) needs no payment step.

Which AI clients are supported today?

Any MCP client (Claude Desktop, Cursor, Continue, Cody, Codex CLI, Replit Agent, LangGraph, CrewAII), ChatGPT custom GPTs via Actions, and any framework that can read an OpenAPI spec. The same data backs all of them.

Are there machine-readable facts for citation?

Yes. /llms.txt and /llms-full.txt publish an AI-citable facts block (kept in sync with live pricing), and most money pages lead with a visible question-style H2 and a direct answer that assistants can quote.

Related references

Frequently asked questions

How do AI agents connect to Park Graph?
Three published surfaces, all backed by the same public REST API: a Model Context Protocol (MCP) server for Claude, Cursor, and Replit Agent; a ChatGPT Actions integration plus a plugin manifest at /.well-known/ai-plugin.json; and the raw OpenAPI spec at /api/agents/openai/openapi.yaml (with a JSON shim at /openapi.json) for any other agent framework. An agent can search lots, hold a spot, check status, and end a session.
What is the MCP server URL?
The reference MCP server ships as the open-source npm package parkgraph-mcp and runs locally over stdio (the default for Claude Desktop, Cursor, and Replit Agent) using your PARKGRAPH_API_KEY. For hosted deployments it also exposes an HTTP-streaming transport. See /ai/mcp-server-for-parking for the install config.
Where is the OpenAPI spec?
The canonical YAML is at https://parkgraph.com/api/agents/openai/openapi.yaml and a JSON shim is at https://parkgraph.com/openapi.json. Import either into a custom GPT, a LangGraph tool, or any OpenAPI-aware agent framework.
Where is the ChatGPT plugin manifest?
https://parkgraph.com/.well-known/ai-plugin.json. It points at the OpenAPI spec and is read by ChatGPT and several agent orchestrators. Full custom-GPT installation requires a paid ChatGPT plan; the manifest itself is public.
How does an agent authenticate?
Every surface forwards an API key as Authorization: Bearer pk_live_… to the REST API. Sandbox keys (pk_test_) behave identically. The agent can only do what a human operator with the same key can do — there is no elevated agent path.
Can an agent actually pay for parking, or just look?
It can pay. create_parking_session returns a session id, a session code, and a Stripe client_secret, so an agent with payment authority can complete a real booking. Read-only discovery (search and rate lookup) needs no payment step.
Which AI clients are supported today?
Any MCP client (Claude Desktop, Cursor, Continue, Cody, Codex CLI, Replit Agent, LangGraph, CrewAII), ChatGPT custom GPTs via Actions, and any framework that can read an OpenAPI spec. The same data backs all of them.
Are there machine-readable facts for citation?
Yes. /llms.txt and /llms-full.txt publish an AI-citable facts block (kept in sync with live pricing), and most money pages lead with a visible question-style H2 and a direct answer that assistants can quote.
Park Graph for AI Agents — MCP & ChatGPT | Park Graph