Agent Discovery

This page maps the machine-readable side of gabrimatic.info. Every important link here is live: JSON, MCP, A2A, OAuth metadata, Markdown alternates, and the policy files agents need before they start guessing.

Quickstart for LLM agents: /llms.txt is the shortest text path through the same surface.

Level 5 / 5, Agent-Native. Verified by isitagentready.com. The score is re-scanned after deploys so it reflects the public site, not a local assumption.

Real-time protocols

`` curl -s -X POST https://www.gabrimatic.info/api/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``

JSON API

ResourceURLCache
Profile/api/profile1 hour
Professional journey/api/journey1 hour
GitHub repositories (live)/api/reposedge 5 min, SWR 1 day
Merged open-source contributions (live)/api/contributionsedge 15 min, SWR 1 day

/api/repos accepts ?per_page= (1 to 100, default 100) and ?sort= (updated, created, pushed, full_name; default updated). /api/contributions groups merged external public PRs into one project entry with a same-origin logo URL and a link to the merged PRs in that repository. All endpoints set Access-Control-Allow-Origin: *.

The two live endpoints serve stale copies while revalidating, so the fetchedAt in a cached response can legitimately lag: up to one day beyond the fresh cache window. Each payload carries its own cache object stating exactly that policy - check it before flagging a timestamp as stale.

The JSON API is described by /openapi.json (OpenAPI 3.1). /api/profile and /api/journey return an ETag; send If-None-Match to skip unchanged bodies. A bare GET /api returns a JSON index of every live endpoint, and an unknown /api/* path returns a 404 that carries the same map, so a wrong guess always shows the way back.

OAuth 2.1 authorization server

An optional OAuth authorization server issues client tokens. Portfolio reads remain public, and tokens do not unlock additional data. Dynamic Client Registration supports loopback agent callbacks and same-site callbacks; authorization requires exact redirect_uri matching against the registration.

EndpointURLSpec
Authorization server metadata/.well-known/oauth-authorization-serverRFC 8414
OpenID Connect discovery/.well-known/openid-configurationOIDC Core
Origin resource metadata/.well-known/oauth-protected-resourceRFC 9728
MCP resource metadata/.well-known/oauth-protected-resource/api/mcpRFC 9728
JWKS (EdDSA public key)/.well-known/jwks.jsonRFC 7517
Optional OAuth client guide/auth.mdOAuth only, no user claims
Web Bot Auth directory/.well-known/http-message-signatures-directoryWeb Bot Auth + RFC 9421
Dynamic client registrationPOST /api/oauth/registerRFC 7591, loopback or same-site redirect URIs
Authorization endpointGET /api/oauth/authorizeRFC 6749 + PKCE S256, exact registered redirect match
Token endpointPOST /api/oauth/tokenRFC 6749 + OAuth 2.1

OAuth registration creates a client, not a user account or a verified agent identity. All reads are public, and their handlers do not validate bearer tokens. The site does not advertise an agent_auth claim flow. See /auth.md for the actual limits.

Access tokens are EdDSA-signed JWTs (typ: at+jwt), iss = https://www.gabrimatic.info, aud = https://www.gabrimatic.info/api/mcp, 1 hour TTL. Supported scopes: mcp:read, mcp:tools.

Markdown for Agents

Every page route returns Markdown when the request carries Accept: text/markdown. Direct *.md URLs are equivalent. This keeps the visual Flutter app and the retrievable text connected to the same source of truth.

curl -s -H 'Accept: text/markdown' https://www.gabrimatic.info/journey
RouteMarkdown alternate
//index.md
/journey/journey.md
/interests/interests.md
/opensource/opensource.md
/flutter-sdk/flutter-sdk.md
/definition/definition.md
/accessibility/accessibility.md
/agents/agents.md

Discovery

Preparing gabrimatic