SFF Book Awards

Use SFF Book Awards with an AI Assistant

Connect an MCP-capable assistant to the public science fiction and fantasy book-awards dataset, then ask natural-language reading, comparison, and dataset-coverage questions. The server is read-only, needs no authentication or secret headers, and serves generated public artifacts rather than live source data.

books
3,248
recognitions
4,447
page copy updated
Jul 29, 2026
dataset metadata updated
Jul 29, 2026
site export built
Jul 29, 2026

Connect

Most MCP clients only need the endpoint. The lower sections are for client authors, manual smoke tests, and debugging failed connections.

MCP endpoint
https://sffawards.com/mcp
Transport
Modern Streamable HTTP on one endpoint. Requests use JSON-RPC over POST with JSON responses or request-scoped SSE when needed. Standalone GET streams and session DELETE requests are not supported.
Protocol version
The endpoint serves only 2026-07-28. Every request is self-describing and must carry the matching protocol value in both its HTTP header and reserved request metadata.
Authentication
None. Do not send OAuth credentials, API keys, bearer tokens, cookies, or user account state.

Use with ChatGPT

Follow OpenAI's current Connect from ChatGPT guide for developer-mode availability and the current interface. Use https://sffawards.com/mcp as the public MCP server URL.

This endpoint needs no authentication and no secret headers. UI labels and workspace controls can change, so this page does not duplicate the setup navigation or require optional app metadata such as an icon.

Browser WebMCP

The MCP endpoint above is the recommended integration for ordinary assistant clients. The interactive browser app also exposes experimental WebMCP tools when an agent opens https://sffawards.com in a supported Chrome origin-trial or local-testing context. The homepage registers them through the current document.modelContext.registerTool() API; the tab must stay open while an agent discovers or executes them.

These browser tools are separate from the remote /mcp endpoint and use only public generated data already loaded by the app:

get_sff_awards_context
Read-only dataset freshness, counts, top facets, current URL, and discovery links.
search_sff_awards_books
Read-only bounded search and filtering without changing the visible page.
show_sff_awards_books
Applies filters to the visible browser page and returns the matching public books.
recommend_sff_awards_books
Read-only deterministic recommendations for common reader intents.
open_sff_awards_page
Navigates the visible tab to a main site page.

What You Can Ask

Use these as ordinary user prompts after your assistant is connected to the MCP server. The assistant should choose the tools; users should not need to write JSON-RPC or tool arguments by hand.

Agent Instruction

If your client lets you add server-specific instructions, use this concise contract. It tells the assistant how to use the MCP server without adding a custom discovery step.

Use the book_awards MCP server for public science fiction and fantasy award data.
Start with native MCP discovery, then call get_dataset_info when you need freshness, facets, coverage, scoring notes, limits, or export links.
Use search_books for filtered retrieval, recommend_books for reader intent, get_book for one work, get_award for one award category, get_subgenre for one taxonomy view, and compare_books for side-by-side choices.
Ground recommendations in returned award recognition, years, win or finalist status, rating counts, score context, caveats, and stable work_key values.
Do not infer live Goodreads or SFADB state; this endpoint serves generated public artifacts only.

Runtime Details

CORS
Open for browser and web-client use from valid HTTPS origins and local development origins. The endpoint responds with Access-Control-Allow-Origin: *, rejects invalid or opaque Origin values, and supports CORS preflight requests for Content-Type, Accept, MCP-Protocol-Version, Mcp-Method, and Mcp-Name.
Response caching
Every /mcp response, including CORS preflight, uses Cache-Control: no-store. Separately, MCP list and read results carry bounded public protocol cache hints so a supporting client can reuse unchanged discovery data without an HTTP intermediary storing the exchange. Access-Control-Max-Age may cache only the preflight permission decision.
Data source
Generated static public artifacts, not request-time Goodreads or SFADB fetching.

Required HTTP Flow

  1. Start with server/discover. There is no initialization or session lifecycle.
  2. For every POST, include MCP-Protocol-Version: 2026-07-28 and a matching io.modelcontextprotocol/protocolVersion value in params._meta.
  3. Include Mcp-Method with the JSON-RPC method and Mcp-Name for named operations such as tools/call, resources/read, and prompts/get.
  4. Include client capabilities in the reserved request metadata; client identity is recommended but optional.
  5. Browser clients must send a valid HTTPS origin, or a local development origin such as http://localhost:5173.
POST /mcp HTTP/1.1
Host: sffawards.com
Accept: application/json
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: server/discover
Origin: https://your-client.example

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "server/discover",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "your-client",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

Native Discovery

  1. Use native MCP discovery. tools/list exposes tool descriptions, input schemas, output schemas, and read-only annotations.
  2. Use resources/list, resources/templates/list, and prompts/list for the resource and prompt catalog.
  3. Use completion/complete for deterministic, bounded award, subgenre, recommendation-intent, genre, and work suggestions exposed by resource templates and prompts.
  4. There is no separate discovery tool. Call get_dataset_info only when the agent needs dataset facets, freshness, coverage, scoring notes, limits, and export URLs.
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "your-client",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}
{
  "discovery_methods": [
    "tools/list",
    "resources/list",
    "resources/templates/list",
    "prompts/list",
    "completion/complete"
  ],
  "schema_resources": [
    "book-awards://schemas/manifest",
    "book-awards://schemas/tools",
    "book-awards://schemas/shared"
  ]
}

Current MCP Tools

get_dataset_info
Coverage, metadata freshness, facets, scoring, exports, and limits. Large author and series facet projections report available, matched, returned, limit, and truncation metadata and link to the full facets resource.
search_books
Filtered book retrieval by normalized title/author text, award-recognition genre, award, subgenre, year, recognition status, score, audience size, and series mode.
recommend_books
Goal-oriented recommendations for entry points, recent winners, reader favorites, hidden gems, similar books, and shortlist or subgenre samplers. Similar-book, award-sampler, and subgenre-sampler intents require their matching selector.
get_book
One work by work_key or Goodreads book ID, with optional recognitions, score context, and related books.
get_award
Award-category views with year, recognition, genre, sort, and limit filters.
get_subgenre
Subgenre views with award-year, recognition, series-mode, sort, limit, and offset filters. Returns up to 50 works per page from the complete filtered population.
compare_books
Compare 2 to 5 distinct works by awards, score, genre, subgenre, series, recency, and audience size. The requested dimensions control which work fields, strongest values, and notes are returned.

Tool Calls

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "your-client",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    },
    "name": "search_books",
    "arguments": {
      "subgenre_keys": [
        "space-opera"
      ],
      "recognition": "winners",
      "limit": 5
    }
  }
}
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "resultType": "complete",
    "content": [
      {
        "type": "text",
        "text": "Found 1 of 1 matching award-recognized books."
      }
    ],
    "structuredContent": {
      "results": [
        {
          "work_key": "work-gr-example",
          "title": "Example Award Winner",
          "award_keys": [
            "hugo-novel"
          ],
          "subgenre_keys": [
            "space-opera"
          ]
        }
      ],
      "page": {
        "limit": 5,
        "offset": 0,
        "total": 1,
        "has_more": false,
        "next_offset": null
      }
    }
  }
}

Error Handling

{
  "jsonrpc": "2.0",
  "id": 5,
  "result": {
    "resultType": "complete",
    "isError": true,
    "structuredContent": {
      "found": false,
      "intent": "similar_to",
      "requested": {
        "seed_work_key": "work-gr-unknown"
      },
      "missing_work_keys": [
        "work-gr-unknown"
      ],
      "results": [],
      "page": {
        "limit": 10,
        "offset": 0,
        "total": 0,
        "has_more": false,
        "next_offset": null
      },
      "recommendation_reasons": {}
    },
    "content": [
      {
        "type": "text",
        "text": "No matching public work was found for work-gr-unknown."
      }
    ]
  }
}

Resources And Prompts

Resources expose dataset metadata, facets, scoring, exports, schemas, works, awards, and subgenres. Scoring and export resources are named projections rather than copies of all dataset metadata. Award and subgenre resources are bounded summaries with tool hints; use tools for complete filtered retrieval. Prompt templates cover next-read recommendations, book comparison, and dataset explanation. Resource templates and supported prompt arguments provide deterministic completion with at most 25 suggestions. Completion for compare_sff_books.work_keys preserves selected keys while suggesting the next distinct stable work_key.

Schema resources are available as book-awards://schemas/manifest, book-awards://schemas/tools, and book-awards://schemas/shared. Work, award, and subgenre resources use URI templates such as book-awards://works/{work_key}.

find_next_sff_read
Use recommend_books or search_books to answer this reader request with award and rating evidence: recommend an award-recognized SFF book.
compare_sff_books
Call compare_books for these work keys and explain the strongest fit per dimension: work-gr-44767458, work-gr-18373

Schema Artifacts

MCP clients should use tools/list as the live contract. Public schema artifacts are also available at https://sffawards.com/data/mcp/schemas/manifest.json, https://sffawards.com/data/mcp/schemas/tools.json, and https://sffawards.com/data/mcp/schemas/shared.json. The schema manifest hashes the generated tool and shared schemas. The separate OpenAPI document describes the HTTP/JSON-RPC transport envelope, not each tool's live schema, and is not claimed by either hash manifest.

Limits And Freshness

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "your-client",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    },
    "name": "search_books",
    "arguments": {
      "subgenre_keys": [
        "space-opera"
      ],
      "recognition": "winners",
      "limit": 10,
      "offset": 10
    }
  }
}

Static Artifacts And Cache Headers