✦ Feason

Five-minute quickstart

One question.
Inspectable context.

Connect an MCP client or make a direct REST request without installing a package. The examples use one production endpoint, one read-only credential, and only standard platform APIs.

REST endpointhttps://www.feason.com/api/context/v1/contextualize

The path

From zero to
verified evidence.

The context is designed to be placed before a user question. Citations and coverage remain separate so your application can display and inspect them.
  1. 01

    Choose REST or MCP

    Use REST when your application needs provider-neutral JSON. Use MCP when an agent or developer tool should discover and call Feason tools directly.

  2. 02

    Create the credential

    REST uses a scoped, read-only Feason Context key. MCP starts at the public remote endpoint and opens OAuth only when a requested tool needs private study context.

  3. 03

    Make one request

    Run the curl command or the dependency-free TypeScript or Python example below. Each sends the same bounded question and tradition filters.

  4. 04

    Inspect the evidence

    Read the context and citations separately. Check represented and missing traditions, provenance, token usage, and truncation before passing context to a model.

REST · curl

Create a key.
Run one command.

Sign in, create a scoped key, and keep it in a server-side environment variable. The request asks for a bounded context block while preserving tradition coverage.

Terminalcurl
export FEASON_CONTEXT_TOKEN="paste-your-key-here"

curl https://www.feason.com/api/context/v1/contextualize \
  -H "Authorization: Bearer $FEASON_CONTEXT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
  "query": "How did early Christians describe grace?",
  "traditions": [
    "catholic",
    "orthodox",
    "reformed"
  ],
  "maxTokens": 2000,
  "maxSources": 12
}'
Expected response shapeapplication/json
{
  "corpusVersion": "theology-v7.0.0",
  "context": "# Feason Context\n...",
  "citations": [{ "label": "E1", "passageId": "..." }],
  "coverage": {
    "representedTraditions": ["catholic", "orthodox"],
    "missingTraditions": ["reformed"]
  },
  "usage": { "estimatedTokens": 1842, "truncated": false }
}

No dependency required

Use the platform you already ship.

These examples use native fetch and Python’s standard library. Keep the credential on the server and pass only the returned, inspected context to your model provider.
TypeScript · Node 20+fetch
const response = await fetch(
  "https://www.feason.com/api/context/v1/contextualize",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.FEASON_CONTEXT_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
  "query": "How did early Christians describe grace?",
  "traditions": [
    "catholic",
    "orthodox",
    "reformed"
  ],
  "maxTokens": 2000,
  "maxSources": 12
}),
  },
);

if (!response.ok) throw new Error(`Feason returned ${response.status}`);

const result = await response.json();
console.log(result.context);
console.log(result.citations);
Python 3.11+urllib
import json
import os
import urllib.request

payload = {
  "query": "How did early Christians describe grace?",
  "traditions": [
    "catholic",
    "orthodox",
    "reformed"
  ],
  "maxTokens": 2000,
  "maxSources": 12
}

request = urllib.request.Request(
    "https://www.feason.com/api/context/v1/contextualize",
    data=json.dumps(payload).encode(),
    headers={
        "Authorization": f"Bearer {os.environ['FEASON_CONTEXT_TOKEN']}",
        "Content-Type": "application/json",
    },
    method="POST",
)

with urllib.request.urlopen(request) as response:
    result = json.load(response)

print(result["context"])
print(result["citations"])

MCP clients

Connect the agent you already use.

All compatible clients use the same production endpoint. Public evidence tools stay inside the canonical corpus boundary; private tools request explicit Feason scopes.

Codex

Add the remote server

Place this entry in your Codex configuration, then start a new session so the tool list refreshes.
[mcp_servers.feason]
url = "https://www.feason.com/api/mcp"

Claude

Add a custom connector

Enter the remote endpoint in the connectors settings. Claude opens the Feason authorization screen when a private tool needs consent.
https://www.feason.com/api/mcp

ChatGPT

Create an MCP connector

Use the production endpoint for the connector URL, then approve only the scopes needed by the workflow.
https://www.feason.com/api/mcp

Troubleshooting

Four checks before debugging your model.

Feason returns explicit HTTP status, coverage, and usage signals. Resolve those at the integration boundary before changing prompts.

401 Unauthorized

Confirm that FEASON_CONTEXT_TOKEN is set in the same shell and that the key has not expired or been revoked. Never place the key in browser-side code.

429 Too Many Requests

Honor the response retry guidance and reduce concurrency. Keys are scoped and rate-limited per client.

Missing tradition coverage

Treat missingTraditions as a visible corpus boundary, not proof that a tradition has no teaching on the question.

A shortened response

When usage.truncated is true, raise maxTokens within the documented limit or narrow the question and source filters.