Skip to content
The Goodwill Ledger
For machines

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.

Endpoint

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.

Connect

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.

Connect

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.

Connect

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.

Try it

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"}.

Tools

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.

Resource

ledger-index.json

The same data is available as a static JSON file at /ledger-index.json. Built at deploy time, drafts excluded.

Promise

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