A structured thought archive.
The Goodwill Ledger is published twice. Once for humans, once for AI tools.
A read-only Model Context Protocol server exposes published essays, frameworks and field notes to compatible AI tools. Drafts and private notes are never exposed. The same content that appears on the public site appears here, with one extra promise: nothing else does.
The server
https://www.goodwill-led.com/mcp
JSON-RPC 2.0 over HTTPS POST. No authentication. CORS enabled. Per-IP rate limit of roughly 60 requests per minute.
Claude Desktop
Open Settings → Developer → Edit Config. Add the server under mcpServers.
The mcp-remote helper wraps the HTTPS endpoint as a stdio server,
which is what Claude Desktop expects.
{
"mcpServers": {
"goodwill-ledger": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://www.goodwill-led.com/mcp"]
}
}
} Restart Claude Desktop. The five tools below appear in the tool list.
Claude on the web
In claude.ai, open Settings → Connectors → Add custom connector. Use:
Name: Goodwill Ledger
URL: https://www.goodwill-led.com/mcp
Auth: None (public read-only) The connector calls the endpoint directly over Streamable HTTP. No proxy required.
ChatGPT
In ChatGPT, open Settings → Connectors → Add connector (available on Plus, Team and Enterprise plans). Use:
Name: Goodwill Ledger
URL: https://www.goodwill-led.com/mcp
Auth: None (public read-only)
Allowed actions: search, fetch Then enable the connector inside a chat with Tools → Connectors → Goodwill Ledger.
Raw HTTP
The endpoint speaks plain JSON-RPC, so any HTTP client works:
curl -X POST https://www.goodwill-led.com/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_ledger",
"arguments": { "query": "trust and institutions", "limit": 3 }
}
}'
For raw HTTP use, you can also call tool methods directly without the tools/call wrapper, e.g. {"method":"list_themes"}.
What is available
-
list_essays(theme?, series?, limit?)Returns published essays, optionally filtered by theme or series.
-
get_essay(slug)Retrieves one full essay or field-note by slug, with the complete plain-text body.
-
search_ledger(query, theme?, limit?)Scored full-text search across published essays, field-notes and frameworks.
-
list_themes(—)Returns the themes covered by the ledger with entry counts.
-
summarise_position(topic, limit?)Returns the supporting essays for a topic so a downstream model can summarise the author's position. Does not generate prose itself.
ledger-index.json
The same data is available as a static JSON file at
/ledger-index.json.
Built at deploy time, drafts excluded.
What this server will never do
- Expose drafts, private notes or unpublished work
- Accept writes, edits or commands of any kind
- Reveal environment variables, file system, or shell access
- Share contact form responses