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 5 min
Merged open-source contributions (live)/api/contributionsedge 15 min, SWR 15 min

/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 ten minutes for repositories and thirty for contributions. 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

OAuth is published for agents that expect bearer-token discipline before tool calls. The read surfaces still allow anonymous access, so this is optional for normal retrieval. 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
Protected resource metadata/.well-known/oauth-protected-resourceRFC 9728
JWKS (EdDSA public key)/.well-known/jwks.jsonRFC 7517
Agent authentication guide/auth.mdauth.md
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

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