Codex
Add the remote server
Place this entry in your Codex configuration, runcodex 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"
Five-minute quickstart
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.
https://www.feason.com/api/context/v1/contextualizeThe path
Use REST when your application needs provider-neutral JSON. Use MCP when an agent or developer tool should discover and call Feason tools directly.
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.
Run the curl command or the dependency-free TypeScript or Python example below. Each sends the same bounded question and tradition filters.
Read the context and citations separately. Check represented and missing traditions, provenance, token usage, and truncation before passing context to a model.
REST · curl
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.
curl# 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
}'application/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
fetchconst 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);urllibimport 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
Codex
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
https://www.feason.com/api/mcp
ChatGPT
https://www.feason.com/api/mcp
Troubleshooting
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.
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.
Treat missingTraditions as a visible corpus boundary, not proof that a tradition has no teaching on the question.
When usage.truncated is true, raise maxTokens within the documented limit or narrow the question and source filters.
After the first request
Build a study companion, lesson source pack, tradition comparison, editorial review, citation checker, or focused Gospel reader.
Explore the six recipes →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 →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 →