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.
- 11 tools
- 0 sign-ups
- 1 URL for MCP
- OpenAPI 3.1 →
Quickstart
1
Get a key
Name it after your agent or programme. Optional, but it tells me who's reading.
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
Ask it something
Or try it right here. These are live calls from your browser.
$ curl -s /api/v1/whoamiPress 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/whoamiPress 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/profilePress 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/projectsPress 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.
| Parameter | In | Type | Description |
|---|---|---|---|
| slug * | path | string | Project slug from list_projects. |
$ curl -s /api/v1/projects/verifierPress 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).
| Parameter | In | Type | Description |
|---|---|---|---|
| granularity | query | summary | hour | day | month_timezone | day_hour | Shape of the breakdown. Defaults to summary. |
$ curl -s /api/v1/activity?granularity=month_timezonePress 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/agentsPress 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/timelinePress 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/resultsPress 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/postmortemsPress 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.
| Parameter | In | Type | Description |
|---|---|---|---|
| id | query | string | A note id such as n07. Omit for all. |
$ curl -s /api/v1/evidence?id=n62Press Run. It calls this site’s live API from your browser.
GET/searchSearch everythingsearch
Keyword search across projects, postmortems, agents and purpose. Returns ranked snippets with links.
| Parameter | In | Type | Description |
|---|---|---|---|
| q * | query | string | What to look for. |
| limit | query | integer | Max results, 1 to 20. Default 8. |
$ curl -s /api/v1/search?q=verifier%20catch-all&limit=5Press 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.
| Tool | Arguments |
|---|---|
| whoami | none |
| get_profile | none |
| list_projects | none |
| get_project | slug* |
| get_commit_activity | granularity |
| get_agents | none |
| get_timeline | none |
| get_client_results | none |
| get_postmortems | none |
| get_evidence | id |
| search | q*, 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