Docs / AI agents & SDKs
Use Ora from AI agents (MCP)
Ora is a remote Model Context Protocol server. Any MCP client (Claude, Cursor, the OpenAI Agents SDK, your own) can check a rule, compute a value, ask what is true now or get a forecast on a symbol, in about 100 ms, with exact answers an LLM cannot make up.
| URL | https://oramodel.com/mcp |
|---|---|
| Transport | Streamable HTTP (JSON responses; no sessions to keep) |
| Auth | Your Ora API key: Authorization: Bearer jev_sk_… (API Keys) |
| Billing | Each tool call that asks the model is one POST /v1/systemone request: same price, rate limits and usage page as the API. list_functions is free. |
Tools
| Tool | Arguments | What it returns |
|---|---|---|
evaluate_rule | symbol, rule | Belief 0.05-0.95 that a rule holds on the latest session.evaluate_rule("NVDA", "C > sma(C, 50)") |
ask | symbol, question | An English question about what is true now; compiled to a rule when Ora recognises it.ask("AAPL", "Is it above its 200-day average?") |
value | symbol, expression | The number an expression has on the latest session.value("SPY", "rsi(C, 14)") |
forecast | symbol, question | The forecast model's probability of yes for a question about the future.forecast("TSLA", "Will it be higher in a week?") |
list_functions | query?, group? | Search the rule language: 322 functions, patterns and facts. Free.list_functions(query="bollinger") |
decide | state, questions, model? | A full POST /v1/systemone request: several typed questions in one call.decide({"symbol": "NVDA"}, {"trend": {"type": "yes_no", "ask": "C > sma(C, 50)"}}) |
Rule answers are beliefs: how clearly the condition holds, from 0.05 to 0.95, not probabilities (Operators and beliefs). Each result has a readable line for the agent and the full API response as structuredContent. A bad rule comes back as a tool error naming the problem, so the agent can fix it and retry.
Claude Code
claude mcp add --transport http ora https://oramodel.com/mcp \ --header "Authorization: Bearer $ORA_API_KEY"
Then ask, for example: "Use ora to check whether NVDA, AMD and AVGO are above their 50-day averages."
Claude Desktop
Claude Desktop reaches remote servers that use an API key through the mcp-remote bridge. In claude_desktop_config.json (Settings → Developer → Edit config):
{
"mcpServers": {
"ora": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://oramodel.com/mcp",
"--header",
"Authorization:${ORA_AUTH}"
],
"env": {
"ORA_AUTH": "Bearer jev_sk_your_key"
}
}
}
}
Cursor
In ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"ora": {
"url": "https://oramodel.com/mcp",
"headers": {
"Authorization": "Bearer ${env:ORA_API_KEY}"
}
}
}
}
OpenAI Agents SDK (Python)
import asyncio, os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async def main():
async with MCPServerStreamableHttp(name="ora", params={
"url": "https://oramodel.com/mcp",
"headers": {"Authorization": f"Bearer {os.environ['ORA_API_KEY']}"},
}) as ora:
agent = Agent(name="Analyst", instructions="Check market conditions with Ora before answering.", mcp_servers=[ora])
result = await Runner.run(agent, "Is TSLA oversold, and is it above its 200-day average?")
print(result.final_output)
asyncio.run(main())
With the OpenAI Responses API, add Ora as a hosted MCP tool:
{
"type": "mcp",
"server_label": "ora",
"server_url": "https://oramodel.com/mcp",
"headers": {
"Authorization": "Bearer jev_sk_your_key"
},
"require_approval": "never"
}
Any MCP client (Python)
# pip install mcp (2.x; with mcp 1.x use streamablehttp_client(url, headers=...))
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client, create_mcp_http_client
async with create_mcp_http_client(headers={"Authorization": "Bearer jev_sk_..."}) as http:
async with streamable_http_client("https://oramodel.com/mcp", http_client=http) as (read, write, *_):
async with ClientSession(read, write) as s:
await s.initialize()
r = await s.call_tool("evaluate_rule", {"symbol": "NVDA", "rule": "C > sma(C, 50)"})
print(r.content[0].text) # NVDA (session of 2026-10-30) · ora-fin-0.1.1
# rule `C > sma(C, 50)` → belief 0.0746 (clearly does not hold; ...)
Under the hood
Plain JSON-RPC over HTTPS POST, so you can test it with curl:
curl -s https://oramodel.com/mcp -H "Authorization: Bearer $ORA_API_KEY" -H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"value","arguments":{"symbol":"SPY","expression":"sma(C, 50)"}}}'
Prefer code? The Python and JavaScript SDKs wrap the same calls. The rule language is an open standard: Ora Rules v1.