{
  "openapi": "3.1.0",
  "info": {
    "title": "BarMusicLive public data",
    "version": "1.0.0",
    "description": "Read-only live music listings. No key, no account. Please link back to the BarMusicLive page for each result. Guide: https://barmusiclive.com/for-ai/"
  },
  "servers": [
    {
      "url": "https://barmusiclive.com"
    }
  ],
  "paths": {
    "/api/v1/upcoming.json": {
      "get": {
        "summary": "Every upcoming show, about five weeks ahead",
        "operationId": "get_upcoming",
        "responses": {
          "200": {
            "description": "Columns in \"fields\"; one array per row, in that order. \"built\" is the build date, \"through\" the last date covered.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "built": {
                      "type": "string",
                      "format": "date"
                    },
                    "through": {
                      "type": "string",
                      "format": "date"
                    },
                    "source": {
                      "type": "string"
                    },
                    "fields": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "date",
                        "start",
                        "title",
                        "url",
                        "venue",
                        "venue_name",
                        "town_name",
                        "town",
                        "artists"
                      ]
                    },
                    "shows": {
                      "type": "array",
                      "items": {
                        "type": "array"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/venues.json": {
      "get": {
        "summary": "Every published venue",
        "operationId": "get_venues",
        "responses": {
          "200": {
            "description": "Columns in \"fields\"; one array per row, in that order. \"built\" is the build date, \"through\" the last date covered.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "built": {
                      "type": "string",
                      "format": "date"
                    },
                    "through": {
                      "type": "string",
                      "format": "date"
                    },
                    "source": {
                      "type": "string"
                    },
                    "fields": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "slug",
                        "name",
                        "url",
                        "address",
                        "town_name",
                        "town",
                        "state",
                        "zip",
                        "lat",
                        "lng",
                        "website",
                        "categories",
                        "upcoming",
                        "timezone"
                      ]
                    },
                    "venues": {
                      "type": "array",
                      "items": {
                        "type": "array"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/artists.json": {
      "get": {
        "summary": "Every published artist",
        "operationId": "get_artists",
        "responses": {
          "200": {
            "description": "Columns in \"fields\"; one array per row, in that order. \"built\" is the build date, \"through\" the last date covered.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "built": {
                      "type": "string",
                      "format": "date"
                    },
                    "through": {
                      "type": "string",
                      "format": "date"
                    },
                    "source": {
                      "type": "string"
                    },
                    "fields": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "example": [
                        "slug",
                        "name",
                        "url",
                        "website",
                        "upcoming"
                      ]
                    },
                    "artists": {
                      "type": "array",
                      "items": {
                        "type": "array"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/mcp/v1.php": {
      "post": {
        "summary": "Model Context Protocol (JSON-RPC 2.0 over Streamable HTTP, JSON responses)",
        "operationId": "mcp",
        "description": "Protocol versions 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Tools: find_shows, search_venues, get_venue, search_artists, get_artist, list_towns. 60 requests a minute and 5,000 a day per address (each message in a batch counts), 600 a minute per IPv6 /48; 429 with Retry-After beyond that. Batches only for protocol 2025-03-26 and earlier, at most 5 messages.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "jsonrpc": "2.0",
                "id": 1,
                "method": "tools/call",
                "params": {
                  "name": "find_shows",
                  "arguments": {
                    "town": "Huntsville, AL"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "JSON-RPC response"
          },
          "202": {
            "description": "Notification accepted"
          },
          "400": {
            "description": "Bad request or protocol mismatch"
          },
          "403": {
            "description": "Plain http; use https"
          },
          "405": {
            "description": "GET, DELETE and other methods; POST only"
          },
          "413": {
            "description": "Body over 64 KB"
          },
          "415": {
            "description": "Content-Type is not application/json"
          },
          "429": {
            "description": "Rate limit"
          },
          "500": {
            "description": "Server error"
          }
        }
      }
    }
  }
}
