{
  "agenticResourceCatalog": "/.well-known/ai-catalog.json",
  "apiCatalog": "/.well-known/api-catalog",
  "capnweb": {
    "declaration": "/api/capnweb.d.ts",
    "endpoint": "/api/rpc",
    "limits": {
      "maxBatchOperations": 32,
      "maxRequestBytes": 65536,
      "operationsPerMinute": 100,
      "rateLimitWindowSeconds": 60,
      "sessionAdmissionsPerMinute": 100,
      "sessionAdmissionWindowSeconds": 60
    },
    "metadata": "/api/capnweb.json",
    "methods": [
      "service",
      "content",
      "discovery",
      "taste",
      "feed"
    ],
    "packageVersion": "0.12.0",
    "sessionLimits": {
      "httpBatch": {
        "maxAgeMs": null,
        "maxCalls": 32,
        "maxCapabilities": 32,
        "maxExportRecords": 500,
        "maxIdleMs": null,
        "maxRequestBytes": 65536,
        "maxResponseBytes": 524288,
        "maxReturnedIds": 100,
        "maxStreamBytes": 131072,
        "maxStreamChunks": 200,
        "maxStreamDurationMs": 30000,
        "maxStreams": 4,
        "maxWeightedWork": 200
      },
      "websocket": {
        "maxAgeMs": 600000,
        "maxCalls": 200,
        "maxCapabilities": 32,
        "maxExportRecords": 5000,
        "maxIdleMs": 60000,
        "maxRequestBytes": 65536,
        "maxResponseBytes": 2097152,
        "maxReturnedIds": 500,
        "maxStreamBytes": 8388608,
        "maxStreamChunks": 500,
        "maxStreamDurationMs": 60000,
        "maxStreams": 4,
        "maxWeightedWork": 1000
      }
    },
    "stability": "stable",
    "transport": "object-capability-rpc",
    "transports": [
      "http-batch",
      "websocket"
    ]
  },
  "collections": {
    "activities": {
      "count": 321,
      "endpoint": "/api/activities.json",
      "filters": [
        "year",
        "sportType",
        "q"
      ],
      "sortable": [
        "startDate",
        "distanceMeters",
        "movingTimeSeconds",
        "title"
      ]
    },
    "books": {
      "count": 163,
      "endpoint": "/api/books.json",
      "filters": [
        "author",
        "q"
      ],
      "sortable": [
        "dateRead",
        "purchasedAt",
        "addedAt",
        "year",
        "rating",
        "title",
        "author"
      ]
    },
    "code": {
      "count": 803,
      "endpoint": "/api/code.json",
      "filters": [
        "kind",
        "repo",
        "year",
        "q"
      ],
      "sortable": [
        "occurredAt",
        "addedAt",
        "score",
        "title"
      ]
    },
    "concerts": {
      "count": 43,
      "endpoint": "/api/concerts.json",
      "filters": [
        "year",
        "artist",
        "venue",
        "city",
        "q"
      ],
      "sortable": [
        "startDate",
        "addedAt",
        "title"
      ]
    },
    "events": {
      "count": 0,
      "endpoint": "/api/events.json",
      "filters": [
        "type",
        "city",
        "year",
        "q"
      ],
      "sortable": [
        "startsAt",
        "addedAt",
        "title"
      ]
    },
    "movies": {
      "count": 320,
      "endpoint": "/api/movies.json",
      "filters": [
        "type",
        "year",
        "genre",
        "director",
        "actor",
        "q"
      ],
      "sortable": [
        "releaseDate",
        "year",
        "addedAt",
        "title"
      ]
    },
    "music": {
      "count": 363,
      "endpoint": "/api/music.json",
      "filters": [
        "genre",
        "type",
        "q"
      ],
      "sortable": [
        "addedAt",
        "releaseDate",
        "title",
        "relevance"
      ]
    },
    "photos": {
      "count": 62,
      "endpoint": "/api/photos.json",
      "filters": [
        "year",
        "month"
      ],
      "sortable": [
        "date"
      ]
    },
    "places": {
      "count": 171,
      "endpoint": "/api/places.json",
      "filters": [
        "city",
        "country",
        "category",
        "neighborhood",
        "q"
      ],
      "sortable": [
        "name"
      ]
    },
    "podcasts": {
      "count": 27,
      "endpoint": "/api/podcasts.json",
      "filters": [
        "show",
        "q"
      ],
      "sortable": [
        "addedAt",
        "releaseDate"
      ]
    },
    "reading": {
      "count": 18,
      "endpoint": "/api/reading.json",
      "filters": [
        "q",
        "domain"
      ],
      "sortable": [
        "publishedAt",
        "addedAt",
        "title",
        "domain"
      ]
    },
    "sports": {
      "count": 116,
      "endpoint": "/api/sporting-events.json",
      "filters": [
        "team",
        "sport",
        "league",
        "year",
        "city",
        "venue",
        "experience",
        "experienceStatus",
        "q"
      ],
      "sortable": [
        "date",
        "title",
        "sport",
        "league"
      ]
    },
    "tweets": {
      "count": 5130,
      "endpoint": "/api/tweets.json",
      "filters": [
        "author",
        "q"
      ],
      "sortable": [
        "createdAt",
        "addedAt"
      ]
    },
    "videos": {
      "count": 352,
      "endpoint": "/api/videos.json",
      "filters": [
        "category",
        "q"
      ],
      "sortable": [
        "addedAt",
        "releaseDate",
        "title"
      ]
    },
    "work": {
      "count": 168,
      "endpoint": "/api/work.json",
      "filters": [
        "year",
        "kind",
        "company"
      ],
      "sortable": [
        "date",
        "title",
        "company",
        "id"
      ]
    }
  },
  "documentation": "/api/",
  "graphql": {
    "endpoint": "/graphql",
    "limits": {
      "aggregateNodes": 500,
      "aliases": 50,
      "cost": 20000,
      "depth": 12,
      "fragmentSpreads": 100,
      "operationDefinitions": 5,
      "pageSize": 100,
      "requestBytes": 65536,
      "responseBytes": 2097152,
      "rootFields": 20,
      "selections": 500,
      "timeoutMs": 15000,
      "urlBytes": 16384
    },
    "methods": [
      "GET",
      "POST"
    ],
    "schema": "/graphql/schema.graphql",
    "version": "1.0.0"
  },
  "lastUpdated": "2026-08-30T21:00:00.000Z",
  "mcp": {
    "discovery": "/.well-known/mcp.json",
    "endpoint": "/mcp",
    "protocolVersion": "2025-11-25",
    "serverCard": "/.well-known/mcp/server-card.json"
  },
  "musicIntersection": {
    "endpoint": "/api/music/intersections.json",
    "method": "POST",
    "readOnly": true
  },
  "musicStation": {
    "endpoint": "/api/music/station.json",
    "method": "POST",
    "readOnly": true,
    "stateful": false
  },
  "name": "Brendan Irvine-Broque Personal API",
  "openapi": "/api/openapi.json",
  "skillsIndex": "/.well-known/skills/index.json",
  "sql": {
    "endpoint": "/api/sql",
    "limits": {
      "maxAstDepth": 16,
      "maxColumns": 24,
      "maxCost": 500,
      "maxGroupColumns": 2,
      "maxInItems": 32,
      "maxPatternLength": 256,
      "maxPredicates": 24,
      "maxProjectionColumns": 24,
      "maxRequestBytes": 16384,
      "maxResponseBytes": 524288,
      "maxRows": 100,
      "maxTokens": 256,
      "rateLimitWindowSeconds": 60,
      "requestsPerMinute": 120
    },
    "methods": [
      "QUERY",
      "HEAD",
      "OPTIONS"
    ],
    "profile": "/api/sql-profile.json",
    "requestMediaType": "application/sql",
    "responseMediaTypes": [
      "application/json",
      "text/csv"
    ],
    "version": "1.1.0"
  },
  "tasteProfile": {
    "discoveryRelation": "taste-profile",
    "endpoint": "/.well-known/taste-profile.json",
    "mediaType": "application/taste-profile+json; version=1"
  },
  "version": "1.0.0"
}