✦ 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 also requires a credential with context:read before its first request. OAuth-capable clients prompt you to sign in when connecting; private study tools require additional explicit scopes.

  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
# Bind your key as FEASON_CONTEXT_TOKEN before running.
: "${FEASON_CONTEXT_TOKEN:?Set FEASON_CONTEXT_TOKEN first}"

curl --fail-with-body --connect-timeout 10 --max-time 20 \
  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",
    "Eastern Orthodox",
    "Reformed"
  ],
  "maxTokens": 2000,
  "maxSources": 12
}'
Illustrative response shapeapplication/json
{
  "corpusVersion": "theology-v7.0.0",
  "context": "# Feason Context\n...",
  "citations": [{ "label": "E1", "passageId": "..." }],
  "coverage": {
    "representedTraditions": ["Catholic", "Eastern 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 token = process.env.FEASON_CONTEXT_TOKEN;
if (!token?.trim()) throw new Error("Set FEASON_CONTEXT_TOKEN first");

const response = await fetch(
  "https://www.feason.com/api/context/v1/contextualize",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${token}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
  "query": "How did early Christians describe grace?",
  "traditions": [
    "Catholic",
    "Eastern Orthodox",
    "Reformed"
  ],
  "maxTokens": 2000,
  "maxSources": 12
}),
    signal: AbortSignal.timeout(20_000),
  },
);

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",
    "Eastern 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, timeout=20) 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, run codex mcp login feason to authorize access, 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, then sign in through Feason authorization to grant context:read before connecting. Private tools need additional explicit scopes.
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

Pause requests and reduce concurrency. Honor Retry-After when present; otherwise use capped exponential backoff with jitter and a retry limit. Do not retry authentication or validation failures.

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.

After the first request

Build around the evidence.

Keep requests bounded, handle errors explicitly, and preserve the source information your readers need.

Pick a workflow

Build a study companion, lesson source pack, tradition comparison, editorial review, citation checker, or focused Gospel reader.

Explore the six recipes →

Keep release context

Store the returned corpusVersion with passage IDs and quotations. Verify against that release and expose incomplete checks instead of turning them into a success.

Build citation checks →

Choose a client deliberately

The TypeScript and Python clients are available as source. Package manifests alone do not confirm a registry release. Follow the repository’s local build instructions and pin the source revision you use.

Explore the SDK source →

Essential storage keeps you signed in and remembers preferences. With your permission, Feason also uses first-party analytics and Google Ads conversion measurement to learn whether a campaign led to a useful action. Google measurement is disabled until you accept, and we disable ad personalization and remarketing. See our Privacy Policy for details.