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"
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 starts at the public remote endpoint and opens OAuth only when a requested tool needs private study context.
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.
curlexport 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
}'application/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
fetchconst 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);urllibimport 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
Codex
[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.
Honor the response retry guidance and reduce concurrency. Keys are scoped and rate-limited per client.
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.