API · v1.0.0 · REST + MCP · no sign-up

Plug your agent into me

Everything on this site, as an API and an MCP server. Three steps, about a minute.

Quickstart

  1. 1

    Get a key

    Name it after your agent or programme. Optional, but it tells me who's reading.

    No sign-up. Keys last 90 days. The API is public either way; a key names who is calling.

  2. 2

    Connect

    Paste one of these. Your key fills in automatically.

    claude mcp add --transport http daniel https://www.danielmcgrattan.org/api/mcp \
      --header "Authorization: Bearer YOUR_KEY"

    No key yet: it works without one, or generate one in step 1.

  3. 3

    Ask it something

    Or try it right here. These are live calls from your browser.

    $ curl -s /api/v1/whoami

    Press Run. It calls this site’s live API from your browser.

Reference

Base URL https://www.danielmcgrattan.org/api/v1. Every value carries a source note (like n62) you can resolve with get_evidence. Each REST route is also an MCP tool with the same name.

GET/whoamiWho is callingwhoami

Echoes the API key the request carried (its id, label and expiry), or says the call is anonymous. Use it to check an agent is wired up.

$ curl -s /api/v1/whoami

Press Run. It calls this site’s live API from your browser.

GET/profileWho Daniel isget_profile

Name, company, purpose, the IMMAF record, travel, operating model, contact and headline traction, each with its source note.

$ curl -s /api/v1/profile

Press Run. It calls this site’s live API from your browser.

GET/projectsEverything builtlist_projects

Every project with its kind, period and one-line description.

$ curl -s /api/v1/projects

Press Run. It calls this site’s live API from your browser.

GET/projects/{slug}One project in fullget_project

What Daniel built, what was hard, what he learned, the results and links, plus the one decision the project is remembered for.

ParameterInTypeDescription
slug *pathstringProject slug from list_projects.
$ curl -s /api/v1/projects/verifier

Press Run. It calls this site’s live API from your browser.

GET/activityCommit activityget_commit_activity

Commit aggregates across every repository: totals, hour of day, per day, the day-by-hour matrix, and the UTC offset per month (which shows where in the world the work happened).

ParameterInTypeDescription
granularityquerysummary | hour | day | month_timezone | day_hourShape of the breakdown. Defaults to summary.
$ curl -s /api/v1/activity?granularity=month_timezone

Press Run. It calls this site’s live API from your browser.

GET/agentsThe team, which is agentsget_agents

Every job Provena runs, the agent that does it, and the human gate that stays with Daniel.

$ curl -s /api/v1/agents

Press Run. It calls this site’s live API from your browser.

GET/timelineDated milestonesget_timeline

Verified milestones from the first repository to the reply agent going live.

$ curl -s /api/v1/timeline

Press Run. It calls this site’s live API from your browser.

GET/resultsClient resultsget_client_results

The approved proof lines. The only place a client is named.

$ curl -s /api/v1/results

Press Run. It calls this site’s live API from your browser.

GET/postmortemsWhat went wrongget_postmortems

Dated failures and the fix for each.

$ curl -s /api/v1/postmortems

Press Run. It calls this site’s live API from your browser.

GET/evidenceEvery sourceget_evidence

Every fact the site shows, with value, source, status and date. Pass an id (n07) for one note.

ParameterInTypeDescription
idquerystringA note id such as n07. Omit for all.
$ curl -s /api/v1/evidence?id=n62

Press Run. It calls this site’s live API from your browser.

Details

MCP/api/mcpTools, resources, prompt, protocol

Streamable HTTP, JSON-RPC 2.0, stateless and read-only. Protocol versions 2025-06-18, 2025-03-26 and 2024-11-05. 11 tools, 2 resources (daniel://llms.txt, daniel://evidence) and one prompt, brief_me(audience), which briefs a programme reviewer, a builder or an engineer using only these tools.

ToolArguments
whoaminone
get_profilenone
list_projectsnone
get_projectslug*
get_commit_activitygranularity
get_agentsnone
get_timelinenone
get_client_resultsnone
get_postmortemsnone
get_evidenceid
searchq*, limit
$ curl -s /api/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"docs","version":"1"}}}'

Press Run. It calls this site’s live API from your browser.

AUTHBearer keysHow keys work

Send Authorization: Bearer dmk_… or X-API-Key. Keys are signed claims (HMAC-SHA256), so they are checked without a database, and they last 90 days. Everything works without a key. A bad key gets a 401 so a misconfigured agent finds out fast. Responses with a key are never cached at the edge.

HTTPEnvelope, caching, errorsThe boring, important bits
Envelope
{ "data": …, "meta": { "api_version", "data_generated_at", "caller" } }
CORS
Any origin.
Caching
Weak ETag on every response; send If-None-Match for a 304.
Errors
{ "error": { "code", "message" } } · 400, 401, 404