irvinebroque.com developer portal

Query Brendan Irvine-Broque’s public taste and preference records through open, read-only interfaces.

Start here

Public reads are anonymous: there are no API keys, account signup, paid tier, or contact-sales step. Requests operate on public production records and cannot mutate them, so the same endpoints are safe for exploration and automated tests. Begin with theREST API documentation or the machine-readableOpenAPI 3.1 description. Responses include canonical item IDs and links; preserve those links when presenting or citing a result.

curl -fsS "https://irvinebroque.com/api/search.json?q=Oakland&limit=5"

Choose an interface

  • REST and OpenAPI: language-neutral search, collection lists, item lookup, metadata, and status at /api/.
  • MCP: task-shaped recommendation, lookup, place-planning, and UI render tools over Streamable HTTP at https://irvinebroque.com/mcp.
  • Cap’n Web: stable, TypeScript-friendly, read-only HTTP batch RPC at https://irvinebroque.com/api/rpc.
  • Feeds and calendars: RSS, Atom, JSON Feed, and iCalendar subscriptions for public additions and events.
  • Markdown: request Accept: text/markdown on supported pages or use their documented .md aliases.

MCP quickstart

Configure an MCP client with the server URL below. The public server requires no authentication and exposes only read and render tools. Discovery metadata is available at/.well-known/mcp/server-card.json and/.well-known/mcp.json. Browser visits to the endpoint lead to a client setup guide; protocol clients should send standard Streamable HTTP JSON-RPC requests directly.

{
  "mcpServers": {
    "irvinebroque": {
      "url": "https://irvinebroque.com/mcp"
    }
  }
}

Cap’n Web quickstart

Cap’n Web version 1.0.0 exposes the same public filters, sorting, pagination, canonical IDs, and response envelopes as REST. It combines up to 20 queued operations into one HTTP request. Queue every call before the first await because an HTTP batch session is single-use.

  • query(collection, params) — Query any public list surface with the same filters, sorting, pagination, and response envelope as REST
  • getMeta() — Return service metadata, interface discovery, and collection counts
  • getStatus() — Return the current public service health snapshot
import { newHttpBatchRpcSession } from 'capnweb';

type PublicCollection =
  | 'activities'
  | 'movies'
  | 'places'
  | 'events'
  | 'sports'
  | 'music'
  | 'concerts'
  | 'videos'
  | 'podcasts'
  | 'tweets'
  | 'code'
  | 'photos'
  | 'books'
  | 'work'
  | 'reading'
  | 'blog'
  | 'writing'
  | 'search'
  | 'feed-items';

type QueryValue = string | number | boolean | null | undefined;

interface ListResponse<TItem = Record<string, unknown>> {
  data: TItem[];
  meta: {
    totalCount: number;
    pageSize: number;
    timestamp: string;
    facets?: Record<string, Record<string, number>>;
  };
  links: {
    self: string;
    first: string;
    last: string;
    next?: string;
    prev?: string;
  };
}

interface PublicApi {
  query(
    collection: PublicCollection,
    params?: Record<string, QueryValue>
  ): Promise<ListResponse>;
  getMeta(): Promise<Record<string, unknown>>;
  getStatus(): Promise<{ status: 'healthy' | 'degraded' }>;
}

const request = new Request('https://irvinebroque.com/api/rpc', {
  headers: { 'CapnWeb-Version': '1.0.0' }
});
using api = newHttpBatchRpcSession<PublicApi>(request);

// Queue every call before awaiting so they share one HTTP request.
const moviesPromise = api.query('movies', {
  limit: 10,
  sort: 'releaseDate:desc'
});
const concertsPromise = api.query('concerts', {
  city: 'Oakland',
  limit: 20
});

const [movies, concerts] = await Promise.all([
  moviesPromise,
  concertsPromise
]);

Requests are limited to 65536 bytes and 1000 operations per source every 60 seconds. SendCapnWeb-Version: 1.0.0for explicit version selection. Breaking changes use a new major version and receive at least 90 days’ notice. StableRATE_LIMITED errors include scope, limit, andretryAfter fields.

Authentication, limits, and support

No authentication is accepted or needed on public read interfaces. The separate owner MCP lane is restricted to the site owner with OAuth and is not a developer write API; its machine-readable registration and authorization flow is documented inthe owner MCP authentication guide. There is no public write or webhook API. Clients should use bounded page sizes, follow returned pagination links, honor cache validators andRetry-After, and avoid scraping HTML when a documented data endpoint exists. Check service status, readagent usage guidance, or use the contact pagefor a reproducible integration issue.