OilPriceAPI
OfficialThe OilPriceAPI MCP server provides real-time and historical energy commodity data, market intelligence, forecasting, and alerting tools for 70+ commodities.
Price & Market Data
Get current spot prices for 70+ commodities (oil, gas, coal, refined products, metals, forex) using natural language or API codes
Market overview: fetch all commodity prices at once, grouped by category
Compare 2–5 commodities side-by-side with spread calculations
Browse the full catalog of available tradable instruments
Historical & Futures Data
Historical prices (high/low/average/change) over day, week, month, or year periods
Front-month futures and full forward curves for Brent and WTI with contango/backwardation analysis
Energy Market Intelligence
Marine/bunker fuel prices (VLSFO, MGO, IFO380) by major shipping port
Baker Hughes US oil & gas rig counts with week-over-week change
Drilling intelligence: active wells, permits, and completions by region
AAA retail diesel prices by US state
Oil storage levels (Cushing, OK and US Strategic Petroleum Reserve)
OPEC country-level production data (paid plan)
EIA Short-Term Energy Outlook (STEO) price forecasts (paid plan)
Alerts & Subscriptions
Create, list, and delete persistent price alerts with threshold conditions
Set up recurring price snapshot subscriptions for one or multiple commodities
Pre-built Prompts & Resources
Analyst templates for daily briefings, spread analysis, gas market comparisons, and supply analysis
Subscribe to real-time price resources for Brent, WTI, Natural Gas, Diesel, or all commodities
Provides energy commodity data and analysis tools for Codeium's Windsurf IDE, enabling access to oil, gas, and commodity prices and market intelligence within the development environment.
OilPriceAPI MCP Server
Give compatible AI clients source-timestamped oil, gas, LNG, carbon, fuel, and related energy data through MCP. No API key is needed to try the limited demo.
Get a Free API Key · Documentation · API Explorer · Pricing
Backed by OilPriceAPI, a normalized REST API for energy dashboards, fleet and logistics tools, maritime workflows, and market research.
Canonical sources: Public product facts · Official MCP Registry record
Features
Reviewed product facts — a keyless read-only tool and stable resource for offer, freshness, authentication, catalog, entitlement, and data-rights questions
Data and workflow tools — latest values, history, futures, marine fuels, fuel surcharges, energy intelligence, alerts, market briefs, and persistent watches
Resources — the reviewed product contract plus subscribable price snapshots
Prompts — analyst templates for briefings, spread analysis, gas markets, diesel costs, and supply analysis
Natural language — ask for "brent oil" or "natural gas", not codes
Broad catalog — oil, gas, coal, refined products, metals, forex, bunker fuels, state diesel, and selected energy-intelligence datasets; access varies by plan and account
Smart errors — unrecognized commodities get suggestions, not silent fallbacks
Related MCP server: SIGNALS Market Readiness MCP Server
Quick Start
npx oilpriceapi-mcpThe default scope is read-only. Account mutations are not listed and direct mutation calls are rejected unless write scope is explicitly enabled:
npx oilpriceapi-mcp --scope writeInspect the package without opening an MCP stdio session:
npx oilpriceapi-mcp --version
npx oilpriceapi-mcp --list-tools
npx oilpriceapi-mcp --list-tools --json --profile core
npx oilpriceapi-mcp doctor --demo
npx oilpriceapi-mcp doctor
npx oilpriceapi-mcp --capabilities --json
npx oilpriceapi-mcp --config claude-code
npx oilpriceapi-mcp --config vscode--config generates client-native, copy/paste-valid JSON for
claude-desktop, claude-code, cursor, vscode, cline, or windsurf.
It never reads or prints the configured API key. Claude Code, VS Code, and
Windsurf outputs use their supported environment or secure-input references;
Claude Desktop, Cursor, and Cline use an explicit local replacement marker.
Add --demo to omit API-key configuration entirely. Scope, profile, and
category options are preserved in the generated server arguments.
What can your agent get?
Example commodity codes:
Code | What it is | Typical agent use |
| Brent crude (global) | market briefings, dashboards |
| WTI crude (US) | trading context, macro models |
| Henry Hub natural gas | energy analytics |
| TTF gas (Europe) | European energy, LNG analysis |
| JKM LNG (Asia) | LNG trading & shipping |
| EU ETS carbon allowances | CBAM, maritime compliance, ESG |
| Diesel (Gulf Coast) | fleet & fuel-surcharge math |
| Jet fuel | aviation ops |
| Marine bunker fuel | voyage costing |
| Gold | macro & portfolio context |
Installation
Try it without an API key
The server works out of the box in keyless demo mode — just omit OILPRICEAPI_KEY from the configs below. The price tools (opa_get_price, opa_compare_prices, opa_list_commodities, opa_market_overview) serve latest available values for a limited demo commodity set, and every other data tool explains its account requirements. Demo responses are marked with a footer. For the broader account-enabled catalog, history, futures, and alerts, get a free API key and add it to your config.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"oilpriceapi": {
"command": "npx",
"args": ["-y", "oilpriceapi-mcp"],
"env": {
"OILPRICEAPI_KEY": "your-api-key-here"
}
}
}
}Claude Code
Add to your project's .mcp.json:
{
"mcpServers": {
"oilpriceapi": {
"command": "npx",
"args": ["-y", "oilpriceapi-mcp"],
"env": {
"OILPRICEAPI_KEY": "your-api-key-here"
}
}
}
}Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"oilpriceapi": {
"command": "npx",
"args": ["-y", "oilpriceapi-mcp"],
"env": {
"OILPRICEAPI_KEY": "your-api-key-here"
}
}
}
}VS Code + Cline
Add to .vscode/mcp.json:
{
"servers": {
"oilpriceapi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "oilpriceapi-mcp"],
"env": {
"OILPRICEAPI_KEY": "your-api-key-here"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"oilpriceapi": {
"command": "npx",
"args": ["-y", "oilpriceapi-mcp"],
"env": {
"OILPRICEAPI_KEY": "your-api-key-here"
}
}
}
}Global Install
npm install -g oilpriceapi-mcpBuild the Container
Container builds require the source revision and commit timestamp so the image, capability manifest, and build metadata are traceable to the same checkout:
docker build \
--build-arg SOURCE_COMMIT="$(git rev-parse HEAD)" \
--build-arg SOURCE_DATE_EPOCH="$(git show -s --format=%ct HEAD)" \
-t oilpriceapi-mcp .
docker run --rm oilpriceapi-mcp --version
docker run --rm oilpriceapi-mcp --capabilities --jsonThe runtime image uses the unprivileged node user. Omit OILPRICEAPI_KEY for
the limited keyless demo, or inject it with your container platform's secret
manager. Do not bake credentials into the image.
Environment Variables
Variable | Required | Description |
| No | API key from oilpriceapi.com/auth/signup. After the core trial, use the public product facts or your account response for the current Free allowance and reset window. Dataset access and limits vary by plan and entitlement. Without a key, the server uses the limited demo. |
| No | Override API base URL (for staging/testing). Default: |
| No |
|
| No | Stable inventory profile: |
| No | Comma-separated category allowlist ( |
Tool Scope and Profiles
read scope includes all non-mutating tools, including alert history,
subscription listing, and subscription event polling. The four create/delete
tools require --scope write or OILPRICEAPI_MCP_SCOPE=write. Unknown scope,
profile, or category values fail closed before stdio starts.
Profiles reduce tool overload without replacing first-class MCP actions:
Profile | Included categories |
| core, market, automation |
| core |
| core, market |
| core, automation |
For example, a read-only price and product-facts server can use:
{
"command": "npx",
"args": ["-y", "oilpriceapi-mcp", "--scope", "read", "--profile", "core"]
}Doctor and Capability Contract
doctor checks the Node runtime, package entry point, API reachability, key
validity, current plan, and reported feature gates. doctor --demo performs a
bounded keyless request. Failures distinguish missing configuration, 401, 402,
403, 429, timeout, DNS/TLS, and upstream 5xx responses. The API key is never
printed.
Every package includes build/capabilities.json. It is generated from the same
SDK registry used by tools/list and records the package/version/source commit,
minimum Node version, scopes, profiles, exact inventories, per-tool annotations,
key/entitlement requirements, resources, commands, and support URLs. Website and
docs consumers should pin a package version, validate schemaVersion and
sourceCommit, and update the artifact only through an explicit dependency
upgrade. They should not scrape CLI prose or hard-code tool counts.
Tools
All tools are prefixed with opa_ to avoid name collisions when multiple MCP servers are loaded.
Tool | Description |
| Reviewed product, offer, freshness, auth, integration, entitlement, and data-rights contract |
| Current spot price for a single commodity |
| Account-visible current prices returned by the API, grouped by category |
| Side-by-side comparison of 2-5 commodities with spread |
| Account-visible commodity catalog returned by the live API |
| Historical prices with high/low/avg/change (day/week/month/year) |
| Front-month futures (Brent, WTI, gasoil, TTF, JKM, EU carbon) |
| Full forward curve with contango/backwardation analysis |
| Bunker fuel prices by port and fuel type (VLSFO/MGO/IFO380) |
| Baker Hughes US rig count with week-over-week change |
| Drilling snapshot: rig counts, frac spreads, 30-day permits, DUCs |
| AAA retail diesel price for any US state (50 states + DC) |
| LTL and parcel carrier fuel surcharge percentages with effective dates and source provenance |
| Cushing and SPR oil storage/inventory levels |
| OPEC country-level production data |
| EIA STEO energy price forecasts |
| EIA weekly petroleum stocks (latest/summary/by_product) |
| US well drilling permits (latest/by_state/by_operator) |
| State-scoped permit search by county/operator/date with measured freshness gate |
| API-number lookup with promoted lifecycle and exact monthly production when available |
| Recent permit counts/top operators/trends with explicit state-health warnings |
| US well production — beta coverage (summary/states/state/well/top_producers/cycle_time/cohorts) |
| Refining/trading spreads (crack, basis, margin) |
Price Alert Tools (authenticated)
These tools create and manage persistent price alerts tied to your OilPriceAPI account, so they require an API key (OILPRICEAPI_KEY). The alert engine evaluates eligible source updates and notifies you (by email, plus webhook if you provide one) when a condition is met.
Tool | Description |
| Create a persistent alert (commodity, operator, threshold, optional webhook) |
| List all alerts on the account |
| Permanently delete an alert by id |
| Recent alert trigger activity (optionally filtered by |
Market Brief & Subscription Tools (authenticated)
The market brief gives a multi-commodity snapshot in one call. Subscriptions ("watches") are persistent, recurring snapshots tied to your account — the API records an event every interval, and the agent polls for new events via a per-user cursor (events are polled, not pushed — there is no always-on connection). These require an API key (OILPRICEAPI_KEY). A subscription differs from an alert: a watch always emits an event each interval (a running log), whereas an alert fires only on a threshold crossing. Per-account code, watch, and cadence limits apply; the API response is authoritative and returns the current limit when exceeded.
Tool | Description |
| Multi-commodity brief: prices, 24h changes, 1m forecasts, spreads, optional narrative |
| Create a persistent recurring watch (codes, interval like |
| List all subscriptions on the account |
| Permanently delete a subscription by id |
| Poll for new watch events since a cursor ( |
Example Questions
"What's the current Brent oil price?"
"Compare Brent and WTI crude"
"Show me oil prices for the past month"
"What's diesel cost in California vs Texas?"
"Give me a market overview of refined products"
"What's the Brent futures curve look like?"
"How many oil rigs are active in the US?"
"What are OPEC production levels?"
"What are bunker fuel prices in Singapore?"
"Show me Cushing storage levels"
"What were the latest EIA crude oil inventories?"
"How many well permits were issued in Texas?"
"What's the current 3-2-1 crack spread?"
"What's the UPS ground fuel surcharge?"
"Show me the gasoil futures curve"Resources
Subscribable price data (JSON):
Resource | URI | Description |
Product Facts |
| Reviewed, versioned public product contract |
Brent Crude |
| Global benchmark crude oil price |
WTI Crude |
| US benchmark crude oil price |
Natural Gas |
| US Henry Hub natural gas price |
Diesel |
| US national average diesel price |
Market View |
| Account-visible current prices from the API |
Product Facts and Model Knowledge
opa_get_product_facts and oilpriceapi://product-facts improve accuracy for a connected MCP session. They do not retrain a model or update its general knowledge. The server prefers the canonical keyless contract, uses a bounded cache, and labels any checksum-verified package fallback with source and warning metadata.
Prompts
Pre-built analyst templates:
Prompt | Description |
| Energy market daily briefing with key prices and movers |
| Analyze the Brent-WTI crude oil spread |
| Compare US vs European natural gas markets |
| Detailed report on a specific commodity (parameterized) |
| Compare diesel prices across US states for fleet planning |
| Analyze supply using OPEC production, rig counts, storage |
Natural Language Support
You say | We understand |
"brent oil", "brent crude" | BRENT_CRUDE_USD |
"wti", "us oil" | WTI_USD |
"natural gas", "henry hub" | NATURAL_GAS_USD |
"european gas", "ttf" | DUTCH_TTF_EUR |
"diesel" | DIESEL_USD |
"gold" | GOLD_USD |
"jet fuel", "aviation fuel" | JET_FUEL_USD |
"carbon", "carbon credits" | EU_CARBON_EUR |
Development
npm install
npm run build
npm test
OILPRICEAPI_KEY=your-key node build/index.jsBreaking Changes in v3.0.0
The default tool scope is now read-only. Create/delete alert and subscription tools require explicit
--scope writeorOILPRICEAPI_MCP_SCOPE=write.Invalid scope/profile/category configuration now fails before MCP stdio starts.
Use
--list-tools --jsonor--capabilities --jsoninstead of relying on a hard-coded inventory.
Breaking Changes in v2.0.0
All tool names now use
opa_prefix (e.g.,get_commodity_price->opa_get_price)Unrecognized commodity names now return an error with suggestions instead of silently defaulting to Brent
list_commoditiesnow fetches live from the API (falls back to static list if unavailable)
The whole OilPriceAPI toolbox
Same data, every stack:
Tool | Install |
| |
| |
| |
| |
no-code price widgets |
Explore the API
🧭 Interactive explorer: api.oilpriceapi.com/swagger — try every endpoint in the browser (demo mode, no key needed)
📜 OpenAPI spec: swagger.json
Privacy Policy
This MCP server runs locally on your machine and only communicates with the OilPriceAPI service:
What is sent: tool requests are translated into HTTPS calls to
api.oilpriceapi.com(commodity codes, query parameters such as time period or state, carrier slugs and service-level inputs for fuel surcharges, and — for alert/subscription tools — the alert parameters you specify), authenticated with your API key. No conversation content is transmitted — only the structured tool inputs above.API key storage: your key is stored locally in your MCP client's configuration (or the
OILPRICEAPI_KEYenvironment variable). It is sent only toapi.oilpriceapi.comas an Authorization header.Logging and demand telemetry: each tool emits a local structured hit/miss event to stderr and attributes its API request with the tool name plus a deliberately lossy argument shape. Commodity codes, intervals, state codes, and bounded numeric controls may be retained; free text, prompts, names, IDs, API well numbers, coordinates, and thresholds are reduced to
provided. API request logging follows the OilPriceAPI Privacy Policy.Third parties: no data is shared with third parties beyond what that policy describes.
Demo mode: without an API key, price tools call the keyless demo endpoint on the same host; no key or account data is involved.
Questions: support@oilpriceapi.com
Pricing Boundary (HTTP 402)
Where the free/paid line sits for this server (#10):
Always open: the MCP server itself (MIT), setup, docs, discovery (tool listing), and keyless demo mode for low-volume evaluation.
API key: use the public product facts and your account response for the current trial, allowance, reset window, and dataset entitlement. Keyless demo mode remains available for a limited dataset.
Behind the paywall: high-volume usage and premium datasets (futures, energy intelligence, well permits/production, alerts at scale). When a request crosses that boundary the API returns a standard HTTP 402/403/429 with the exact limit or feature gate in the body, and this server surfaces that message plus an upgrade link — agents get a machine-readable stop, never a silent failure.
x402 protocol: per-request crypto micropayments via the x402 protocol are not currently supported — payment is by account plan (Stripe), authenticated with your API key.
License
MIT
Links
Also Available As
Python SDK - Python client with Pandas integration
Node.js SDK - TypeScript/JavaScript SDK
Go SDK - Idiomatic Go client
OpenBB Integration - OpenBB Platform provider
Available Tools
32 toolsopa_compare_pricesCompare Commodity PricesARead-only
Compare current prices between 2-5 commodities side by side. Use when the user asks to compare commodities (e.g., 'Brent vs WTI', 'US gas vs EU gas'). Returns each commodity's price with 24h changes, plus the spread if comparing two same-currency commodities. Accepts natural language or codes.
| Name | Required | Description | Default |
|---|---|---|---|
| commodities | Yes | List of 2-5 commodity names or codes to compare (e.g., ['brent', 'wti'] or ['NATURAL_GAS_USD', 'DUTCH_TTF_EUR']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint and openWorldHint annotations, the description discloses that it returns each commodity's price with 24h changes and the spread if comparing two same-currency commodities, adding valuable behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences (49 words), concise, front-loaded with the main purpose, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description adequately covers purpose, usage, and return structure. Minor omission: does not mention that schema enforces maxItems=5, but schema already handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the parameter 'commodities' is well-described in the schema. The description adds the note about accepting natural language, which is not in the schema, providing additional semantic clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares current prices of 2-5 commodities side by side, distinguishing it from single-commodity tools like opa_get_price and spread tools like opa_get_spread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use when the user asks to compare commodities, gives examples ('Brent vs WTI', 'US gas vs EU gas'), and notes it accepts natural language or codes, providing clear context for when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_account_statusGet Account StatusARead-only
Get the current API account's plan tier, request usage, remaining quota, and reset date. Use before calling gated tools, when the user asks about their plan/limits/usage, or after any 402/403/429 to explain what the current plan covers. Works on every plan including free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description isn't burdened with safety. It adds valuable context beyond annotations: what data is returned (plan tier, usage, remaining quota, reset date) and that it 'Works on every plan including free.' This enriches the agent's understanding of the tool's behavior and error-handling utility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary function in the first sentence and usage guidance in the second. Every sentence provides distinct value: one defines the tool's purpose, the other specifies when to invoke it. No redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool with strong annotations, the description is complete. It identifies the main return fields, provides concrete use cases, and notes universal availability. The lack of an output schema is adequately compensated by the detailed enumeration of what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description adds meaning about the return content but doesn't need to explain parameters since there are none. Schema coverage is 100%, and the description complements the empty schema by clarifying the tool's output focus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states a specific verb and resource: 'Get the current API account's plan tier, request usage, remaining quota, and reset date.' This clearly distinguishes the tool from the data-retrieval siblings (e.g., opa_get_price, opa_get_diesel_by_state), which focus on market data rather than account status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios: 'Use before calling gated tools, when the user asks about their plan/limits/usage, or after any 402/403/429 to explain what the current plan covers.' This gives clear when-to-use guidance and a rationale, making the tool's role in workflow obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_alert_triggersGet Alert TriggersARead-only
Get recent trigger activity for the user's price alerts — which alerts have fired, how many times, and when they last triggered. Use when the user asks whether any alerts have gone off or about recent alert activity. REQUIRES an API key (OILPRICEAPI_KEY). Note: the API tracks trigger history as per-alert counters (trigger_count / last_triggered_at) rather than a separate event feed, so this returns alerts that have triggered.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Optional ISO 8601 date/time (e.g., '2026-06-01' or '2026-06-01T00:00:00Z'). Only alerts last triggered on or after this time are shown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: it requires an API key (OILPRICEAPI_KEY) and explains that the API returns per-alert counters (trigger_count, last_triggered_at) rather than an event feed. This helps the AI agent understand the data model. Annotations already indicate readOnlyHint=true, so the description complements them well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: the first states purpose, the second gives usage guidance, and the third provides critical behavioral context. It is concise, front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one optional parameter, no output schema, and annotations are provided, the description covers all necessary aspects: what it does, when to use it, prerequisites (API key), and the nature of the returned data (counters, not events). This is sufficient for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add extra meaning for the 'since' parameter beyond what the schema already provides (ISO 8601 format, filters by last_triggered_at).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent trigger activity for the user's price alerts, specifying what data is returned (which alerts fired, counts, last triggered time). This distinguishes it from sibling tool 'opa_list_price_alerts' which likely lists all alerts without trigger history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when the user asks whether any alerts have gone off or about recent alert activity.' This gives clear context for when to invoke the tool, though it does not mention when not to use it or explicitly list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_data_qualityGet Data Quality ReportARead-only
Get OilPriceAPI's own data-quality grades. With a commodity code: that series' quality report — overall grade/score plus dimension scores (completeness, freshness, and more) for the current period. Without a code: the catalogue-wide summary (grade distribution by category). Use when the user asks how reliable/complete a series is, or which series carry the highest quality grades. Per-commodity reports require a paid plan (Developer, $19/mo, and up); the summary works on any key.
| Name | Required | Description | Default |
|---|---|---|---|
| commodity | No | Optional commodity name or code (e.g., 'brent', 'NATURAL_GAS_USD') for a per-series report. Omit for the catalogue-wide summary. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful context beyond the readOnlyHint annotation: it discloses that per-commodity reports require a paid plan and describes the output structure (overall grade/score, dimension scores, or catalogue-wide summary). This goes beyond simply restating the annotation and gives the agent a clearer behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core verb, and every sentence conveys necessary information: what the tool does, the two modes, when to use it, and a cost caveat. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only reporting tool with one optional parameter and no output schema, the description covers the operation modes, what the response contains, and access restrictions. It is complete enough for an agent to select and invoke correctly without further guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already fully describes the 'commodity' parameter with examples and behavior when omitted. The description reinforces this but doesn't add substantial new semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get OilPriceAPI's own data-quality grades,' a specific verb+resource that distinguishes this tool from price/history siblings. It also explains the two modes of operation (with or without a commodity code), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use when the user asks how reliable/complete a series is, or which series carry the highest quality grades.' It also notes the paid-plan requirement for per-commodity reports, which is an important usage constraint. However, it does not name specific alternative tools or when-not-to-use exclusions, though the distinct purpose implies this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_diesel_by_stateGet Diesel Price by StateARead-only
Get the current average retail diesel price for a US state. Use when the user asks about diesel prices in a specific state, diesel fuel costs by state, or state-level fuel prices. Accepts state names ('California') or 2-letter codes ('CA'). Returns the AAA-sourced state average diesel price. Covers all 50 states plus DC.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | US state name or 2-letter code (e.g., 'California', 'CA', 'Texas', 'TX') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and openWorldHint=true, and the description adds context beyond this by specifying the data source ('AAA-sourced') and coverage ('all 50 states plus DC'), which helps the agent understand reliability and scope. It does not describe potential failure modes, but given the annotations cover the safety profile, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a distinct purpose: what it does, when to use, input format, and output source/coverage. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one fully described parameter and no output schema, the description covers the essential context: function, trigger phrases, input format, output source, and geographic coverage. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter 'state' with examples, and the description repeats this format ('Accepts state names or 2-letter codes') without adding new semantics beyond the schema's coverage. Since schema coverage is 100%, the description adds marginal value only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the current average retail diesel price for a US state,' using a specific verb and resource. It distinguishes itself from siblings like opa_get_price or opa_get_futures by explicitly scoping to diesel and state-level.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage triggers: 'Use when the user asks about diesel prices in a specific state, diesel fuel costs by state, or state-level fuel prices.' This gives clear when-to-use context, though it does not name exclusions or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_drillingGet Drilling ActivityARead-only
Get a drilling activity snapshot: US, Canada, and international rig counts, frac spread count, well permits issued in the last 30 days (with a by-state breakdown), and DUC (drilled-uncompleted) well totals. Use when the user asks about drilling activity, rigs vs frac spreads, or upstream operations. Requires the Scale plan ($299/mo) or a drilling data plan.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint, so the read-only nature is already covered. The description adds valuable context about the required Scale plan and the specific data elements included, which helps the agent understand access constraints and tool scope beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words: the first states what it returns, the second gives usage guidance, and the third notes the plan requirement. Information is front-loaded and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a zero-parameter tool: it lists all key data points in the snapshot, gives usage context, and mentions access prerequisites. No output schema exists, but the description sufficiently conveys what the agent can expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific semantics but clearly explains the output content, which is helpful for selecting the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('drilling activity snapshot') with detailed contents (rig counts, frac spread, permits, DUCs). It clearly distinguishes from sibling tools that focus on individual data points like rig counts or permits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use when the user asks about drilling activity, rigs vs frac spreads, or upstream operations.' It does not mention when-not to use or name alternative tools, but the context is clear and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_forecastsGet Price ForecastsARead-only
Get energy price forecasts from EIA Short-Term Energy Outlook (STEO) and other sources. Use when the user asks about price predictions, outlooks, or where oil/gas prices are heading. Returns forecast data for key commodities. Requires the Reservoir Mastery premium tier.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, setting a read-only, non-destructive baseline. The description adds meaningful context about the data source (EIA STEO and other sources) and the premium tier access requirement, but it does not detail return format, potential errors, or rate limits. Given annotations cover the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core action, then usage guidance, then return/access details. Every sentence contributes value without redundancy or fluff, making it highly efficient for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description covers the essential elements: source, trigger, return summary, and access requirement. It is adequate for the tool's simplicity, though it could be slightly more specific about which commodities or the forecast horizon. This does not detract significantly from completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty. Schema description coverage is effectively 100% (vacuous). The description does not need to explain parameter meanings since there are none, and the baseline for zero parameters is 4 per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves energy price forecasts from EIA STEO and other sources, with a specific verb ('Get') and a resource ('price forecasts'). It distinguishes itself from sibling tools by focusing on forecasts and explicitly mentions the use case of price predictions/outlooks, which is distinct from current prices (e.g., opa_get_price) or futures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use when the user asks about price predictions, outlooks, or where oil/gas prices are heading.' It also notes the premium tier requirement as a prerequisite. However, it does not explicitly contrast with alternatives or give when-not-to-use guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_fuel_surchargeGet Fuel SurchargeARead-only
Get carrier-published fuel surcharge percentages for LTL freight and parcel carriers. Use when the user asks about current or historical fuel surcharge rates for carriers like ODFL, Saia, Estes, XPO, ABF, TForce, Averitt, Southeastern Freight, UPS, FedEx, or DHL. Auto mode treats UPS/FedEx/DHL as parcel carriers and other carrier slugs as LTL. Parcel history requires a service_level such as ground, air, or international_air_export.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Carrier mode: auto (UPS/FedEx/DHL route to parcel; others route to LTL), ltl, or parcel. Default: auto. | auto |
| carrier | No | Optional carrier slug or common name. Examples: odfl, saia, estes, xpo, abf, tforce, averitt, southeastern-freight, ups, fedex, dhl. Omit to list current carriers. | |
| history | No | When true, return historical surcharge rows instead of the latest rate. Parcel history requires service_level. | |
| per_page | No | History rows to return, from 1 to 100. Default: 12. | |
| service_level | No | Parcel service level such as ground, air, international_air_export, international_air_import, or international_ground. Optional for latest; required for parcel history. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds behavioral context beyond annotations by explaining how auto mode classifies carriers (UPS/FedEx/DHL as parcel, others as LTL) and that parcel history requires a service_level. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the primary purpose, followed by usage context, then key constraints. Every sentence carries useful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema) and the presence of strong annotations, the description covers the main use cases, the auto mode logic, and special requirements for parcel history. The return format is implied by the purpose ('percentages'), so this is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the auto-mode mapping and clarifying the service_level requirement for parcel history, which helps the agent understand how parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a specific resource ('carrier-published fuel surcharge percentages') and scope ('LTL freight and parcel carriers'). It clearly distinguishes from all sibling tools, none of which cover fuel surcharges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Use when the user asks about current or historical fuel surcharge rates') and gives important guidance on auto mode and parcel history requirements. It doesn't name alternatives, but no direct alternative exists among siblings, so the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_futuresGet Futures PriceARead-only
Get the latest front-month futures contract price for energy commodities. Use when the user asks about futures, forward prices, or contract prices. Supports crude oil (BZ/ice-brent = Brent, CL/ice-wti = WTI), ICE Gasoil (ice-gasoil), natural gas (natural-gas), European TTF gas (ttf-gas), LNG JKM (lng-jkm), EUA carbon (eua-carbon), and UK carbon (uk-carbon). For the full forward curve across all contract months, use opa_get_futures_curve instead. Requires the Professional plan ($99/mo) or higher.
| Name | Required | Description | Default |
|---|---|---|---|
| contract | No | Futures contract code or slug: BZ/ice-brent = Brent crude, CL/ice-wti = WTI crude, ice-gasoil (G/QS) = ICE Gasoil, natural-gas (NG) = Natural Gas, ttf-gas (TTF) = European TTF natural gas, lng-jkm (JKM) = LNG JKM (Asia), eua-carbon (EUA) = EU carbon allowance, uk-carbon (UKA) = UK carbon allowance (default: BZ) | BZ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds valuable context: front-month only, supported commodity aliases, and a Professional plan requirement ($99/mo). This goes beyond the annotations' basic safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences, front-loaded with the main purpose. Each sentence serves a distinct function: definition, use context, commodity mapping, alternative tool, and access requirement. It is slightly longer than minimal but still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, but the description implies the return type (price) and covers supported contracts, the alternative for full curves, and access restrictions. Given the single optional parameter and good annotations, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the 'contract' parameter with an enum and detailed descriptions (100% coverage). The tool description repeats the alias mapping but does not add new syntax or format details, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb-plus-resource statement: 'Get the latest front-month futures contract price for energy commodities.' It clearly distinguishes itself from the sibling tool opa_get_futures_curve by limiting to front-month, avoiding ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use when the user asks about futures, forward prices, or contract prices' and provides an exclusion: 'For the full forward curve across all contract months, use opa_get_futures_curve instead.' This gives clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_futures_curveGet Futures CurveARead-only
Get the full futures forward curve showing prices across all contract months. Use when the user asks about the forward curve, contango/backwardation, or term structure. Supports crude oil (BZ/ice-brent = Brent, CL/ice-wti = WTI), ICE Gasoil (ice-gasoil), natural gas (natural-gas), European TTF gas (ttf-gas), LNG JKM (lng-jkm), EUA carbon (eua-carbon), and UK carbon (uk-carbon). Returns a table of contract months with settlement prices, plus market structure analysis. Requires the Professional plan ($99/mo) or higher.
| Name | Required | Description | Default |
|---|---|---|---|
| contract | No | Futures contract code or slug: BZ/ice-brent = Brent crude, CL/ice-wti = WTI crude, ice-gasoil (G/QS) = ICE Gasoil, natural-gas (NG) = Natural Gas, ttf-gas (TTF) = European TTF natural gas, lng-jkm (JKM) = LNG JKM (Asia), eua-carbon (EUA) = EU carbon allowance, uk-carbon (UKA) = UK carbon allowance (default: BZ) | BZ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds useful context: returns a 'table of contract months with settlement prices, plus market structure analysis' and reveals the plan requirement. However, it doesn't detail pagination or response size limits, but for a read-only data retrieval tool with good annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all informative: purpose, usage context, supported instruments, and return contents. No fluff, no repetition of schema enum values (the description uses readable commodity names while the schema has codes). Front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, a complete enum, and no output schema, the description covers the key aspects: what it returns, when to use it, supported contracts, and a plan restriction. The only minor gap is not mentioning the output format details beyond 'table', but with simple inputs and no nested schema, this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the enum descriptions are thorough, mapping each code to its commodity. The description adds value by listing supported commodities in prose, but the schema already provides full parameter meaning. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the full futures forward curve across all contract months, with a specific verb ('Get') and resource ('full futures forward curve'). It distinguishes from siblings like opa_get_futures by emphasizing 'forward curve, contango/backwardation, or term structure', which is a unique scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'when the user asks about the forward curve, contango/backwardation, or term structure'. Also lists supported commodities and contract codes, and notes the Professional plan requirement, which helps the agent decide if this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_historyGet Price HistoryARead-only
Get historical price data for a commodity over a time period. Use when the user asks about price trends, historical prices, or how a commodity has performed over time. Returns high, low, average, change, and data point count. Periods: day (24h), week (7d), month (30d), year (365d). Supports point-in-time (vintage) queries via as_of: the series as it was knowable at that instant — later-collected rows absent, later revisions rolled back (no lookahead bias; built for backtests). Requires a paid plan (Developer, $19/mo, and up) — the free tier serves latest prices only.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | Optional ISO8601 date/datetime for a point-in-time (vintage) view, e.g. '2026-06-02'. Returns the series as it was knowable then: rows collected later are absent and values revised later are rolled back. Must not be in the future. Revision-correction coverage since 2026-07-28. | |
| period | No | Time period: day, week, month, or year (default: month) | month |
| commodity | Yes | Commodity name or code (e.g., 'brent', 'WTI_USD') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses specific return fields (high, low, average, change, data point count), explains period durations (day=24h, week=7d, etc.), and gives a detailed account of as_of vintage semantics (later rows absent, revisions rolled back, no lookahead bias). It also adds the critical paid-plan restriction for historical data, which is substantial behavioral and operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense: each sentence earns its place, covering purpose, trigger, outputs, periods, as_of behavior, and pricing. It is front-loaded with the core action and avoids repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description still lists the return fields and key behavioral nuances, including the vintage feature and plan limitation. For a 3-parameter tool with full schema coverage, this is complete and well-positioned among 32 sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enhances this by mapping periods to human-readable durations and reinforcing as_of semantics with backtesting context that goes beyond the schema's description. It doesn't add new syntax details but adds interpretive value, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get historical price data for a commodity over a time period.' It clearly differentiates from siblings like opa_get_price by emphasizing 'historical', 'price trends', and 'performed over time', making the tool's niche obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use: 'Use when the user asks about price trends, historical prices, or how a commodity has performed over time.' It also notes the paid-plan requirement as a constraint. However, it does not name an alternative tool for current prices (e.g., opa_get_price), so it lacks an explicit 'when not to use' statement, though the context strongly implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_marine_fuelsGet Marine Fuel PricesARead-only
Get latest marine fuel (bunker) prices across major shipping ports. Use when the user asks about bunker fuel, marine fuel, VLSFO, MGO, IFO380, or shipping fuel costs. Can filter by port (e.g., SINGAPORE, ROTTERDAM, HOUSTON) and/or fuel type (VLSFO, MGO, IFO380). Returns a table of port prices. Requires the Professional plan ($99/mo) or higher.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Filter by port name (e.g., 'SINGAPORE', 'ROTTERDAM', 'HOUSTON') | |
| fuel_type | No | Filter by fuel type: VLSFO, MGO, or IFO380 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds valuable context: it returns a table format, requires a Professional plan ($99/mo) or higher, and implies live/current pricing. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, usage triggers, filter options, return format, and access requirement. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with two optional params and no output schema, the description is complete. It covers purpose, filters, return type, and a critical access prerequisite (plan level), which is sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters already described. The description adds example port values and clarifies that filters can be used individually or together, but this is largely redundant with the schema, so it does not meaningfully extend the semantics beyond the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches latest marine fuel (bunker) prices for major shipping ports, with specific fuel types (VLSFO, MGO, IFO380) and port examples. This distinguishes it from siblings like opa_get_diesel_by_state or opa_get_fuel_surcharge.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when the user asks about bunker fuel, marine fuel, VLSFO, MGO, IFO380, or shipping fuel costs,' giving clear trigger context. However, it does not explicitly name alternatives or state when not to use this tool, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_market_briefMulti-Commodity Market BriefARead-only
Get a multi-commodity market brief: latest spot prices, 24h changes, 1-month forecasts (for Brent/WTI/Natural Gas), and notable spreads — for several commodities in ONE call. Use when the user wants a market snapshot, morning brief, or an at-a-glance read across multiple commodities. Set narrative: true to also get a plain-English summary plus market context (active supply disruptions, key economic indicators). Accepts natural language ('brent', 'us gas') or API codes. REQUIRES an API key (OILPRICEAPI_KEY); counts as 1 request. Per-tier code limits apply (free: 3 codes). For a single price use opa_get_price; for ongoing recurring monitoring use opa_create_price_subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| codes | Yes | Commodity names or codes to include (e.g., ['brent', 'wti'] or ['BRENT_CRUDE_USD', 'NATURAL_GAS_USD']). Free tier allows up to 3. | |
| narrative | No | If true, also include a plain-English summary + market context (disruptions, indicators). Default: false (structured data only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, but the description adds substantial behavioral context: it reveals the API key requirement (OILPRICEAPI_KEY), that the call counts as 1 request, and that per-tier code limits apply (free: 3 codes). It also discloses the narrative option's added content, going well beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: core purpose, use cases, param behavior, and auth/limits/alternatives. It is front-loaded with the most important information and contains no fluff or repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description clearly enumerates what the tool returns (spot prices, 24h changes, forecasts, spreads, optional narrative context) and covers resource constraints (API key, request count, tier limits). For a two-parameter read-only tool, this is comprehensively sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are described, but the description adds meaningful nuance: it explicitly states that codes accept natural language ('brent', 'us gas') or API codes, and clarifies that narrative adds a 'plain-English summary plus market context.' This exceeds the schema's basic parameter documentation, earning a score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a multi-commodity market brief' with concrete contents (spot prices, 24h changes, 1-month forecasts, spreads). It clearly distinguishes this from sibling tools by emphasizing 'several commodities in ONE call' and explicitly contrasts with single-price and subscription tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicitly stated: 'Use when the user wants a market snapshot, morning brief, or an at-a-glance read across multiple commodities.' It also names two alternatives with clear disambiguation: 'For a single price use opa_get_price; for ongoing recurring monitoring use opa_create_price_subscription.' This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_natural_gas_hubsGet US Natural Gas Hub PricesARead-only
Get US physical natural gas hub prices as basis to Henry Hub (USD/MMBtu). Use when the user asks about regional gas prices or hub basis — Waha (West Texas/Permian), SoCal Citygate, Chicago Citygate, Algonquin Citygate, Eastern Gas South (formerly Dominion South), Houston Ship Channel. Without a hub, returns every live hub plus its basis; with a hub, returns that hub's latest price, basis, and basis history. Hub series differ in depth — check history_days before requesting a long window. Requires a paid plan (Developer, $19/mo, and up).
| Name | Required | Description | Default |
|---|---|---|---|
| hub | No | Optional hub slug: waha, socal, chicago, algonquin, eastern-gas-south, houston-ship-channel. Omit to list all live hubs with their basis to Henry Hub. | |
| past | No | Optional basis-history window for a single hub, e.g. 30d, 6m, 1y (only used when hub is given). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the two modes (with/without hub), return contents (basis and history), and adds a critical caveat about varying hub history depth. It also discloses the paid-plan requirement. These details go well beyond the readOnlyHint and openWorldHint annotations, without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and well-structured: it opens with the core purpose, follows with usage guidance and hub enumeration, and then explains behavior and prerequisites. No sentence is wasted, and all necessary information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, optional-parameter tool with no output schema, the description fully covers behavior in both call variants, the data depth caveat, and access requirements. It is complete for an agent to select and invoke the tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema descriptions are complete (100% coverage), the description adds value by clarifying the 'past' parameter's format with examples (30d, 6m, 1y) and reiterating that it only applies when a hub is provided. This enriches the parameter semantics beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get US physical natural gas hub prices as basis to Henry Hub') and explicitly lists the hub identifiers, clearly distinguishing this tool from siblings like opa_get_price or opa_get_futures. The scope (natural gas hubs) is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use when the user asks about regional gas prices or hub basis' and names the relevant hubs, giving clear context. However, it does not mention when not to use this tool or name alternative tools for non-hub commodities, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_oil_inventoriesGet EIA Oil InventoriesARead-only
Get the latest EIA weekly petroleum inventory (stocks) data. Use when the user asks about oil inventories, crude stocks, weekly EIA stocks, inventory builds/draws, or product-level inventory levels. Returns the latest weekly figures; optionally a summary view or a breakdown by petroleum product. Requires the Reservoir Mastery premium tier.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Which view to return: latest (most recent weekly snapshot), summary (headline totals + week-over-week change), or by_product (breakdown per petroleum product). Default: latest. | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds context beyond annotations by mentioning the premium tier requirement and the available return views ('latest weekly figures; optionally a summary view or a breakdown by petroleum product'). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose. The second sentence efficiently adds usage scenarios and access requirements. No wasteful words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema and no output schema, the description covers the essential context: what the tool returns, when to use it, and access requirements. It could provide more detail about the exact structure of returned data, but the parameter descriptions already explain view-specific outputs, making it reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (view) with 100% schema description coverage; the schema already explains each enum option. The description merely restates the view options without adding extra meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the latest EIA weekly petroleum inventory (stocks) data.' It uses a specific verb and resource and lists trigger phrases like 'oil inventories, crude stocks, weekly EIA stocks, inventory builds/draws.' While it doesn't explicitly contrast with sibling tools like opa_get_storage, the purpose is unambiguous and sufficiently differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use when the user asks about oil inventories, crude stocks, weekly EIA stocks, inventory builds/draws, or product-level inventory levels,' providing clear when-to-use guidance. It also discloses the prerequisite 'Requires the Reservoir Mastery premium tier,' which is valuable context for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_opec_productionGet OPEC ProductionARead-only
Get the latest OPEC oil production data. Use when the user asks about OPEC output, production quotas, supply cuts, or OPEC+ compliance. Returns country-level production figures. Requires the Reservoir Mastery premium tier.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to repeat safety traits. It adds value by specifying the return format ('country-level production figures') and the access constraint ('Requires Reservoir Mastery premium tier'). This provides behavioral context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a clear purpose: purpose, usage trigger, return format, and access requirement. It is front-loaded with the main verb and object, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return value as 'country-level production figures'. It also covers usage context and premium-tier restriction. For a parameter-less, read-only data retrieval tool, this is complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description refers to 'latest' and 'country-level' output, but these describe the data, not parameters. No parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get the latest OPEC oil production data', which is a specific verb+resource statement. It further clarifies the scope by mentioning 'country-level production figures'. While it does not explicitly name a sibling tool, the function is clearly distinct from all listed siblings, which focus on prices, inventories, and drilling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use when the user asks about OPEC output, production quotas, supply cuts, or OPEC+ compliance.' It also notes the premium tier requirement. However, it does not state when not to use the tool or name an alternative, so it stops short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_plansGet Plans & PricingARead-only
Get OilPriceAPI's current subscription plans: monthly/yearly price, request limits, and included features for each tier. Use when the user asks what an upgrade costs, which plan unlocks a gated tool (history, futures, natural gas hubs...), or how the tiers compare. Live pricing from the API — no key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar for additional disclosure is lower. The description adds valuable context: 'Live pricing from the API — no key required' indicates real-time data and authentication requirements. It does not mention rate limits or error behavior, but the added auth note justifies a solid score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: the first states the core function, the second provides usage context, and the third adds practical notes. Every sentence serves a purpose, with no redundant or unclear phrasing. It is front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with rich annotations and no output schema, the description fully covers what the tool does, when to use it, and auth requirements. It is complete enough for an agent to select and invoke the tool correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty. The description therefore has no parameter details to add. Baseline for zero-param tools is 4, and the description does not introduce confusion the schema already documents everything.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), names the resource ('OilPriceAPI's current subscription plans'), and enumerates the content (monthly/yearly price, request limits, included features). This clearly distinguishes it from sibling tools like opa_get_price or opa_list_subscriptions, which focus on data or account status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use scenarios: 'when the user asks what an upgrade costs, which plan unlocks a gated tool... or how the tiers compare.' It also notes no key is required. However, it does not mention when not to use it or name alternative tools, so it falls short of full explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_priceGet Commodity PriceARead-only
Get the latest available, source-timestamped value for an energy commodity. Use when the user asks about a single commodity's latest price. Accepts natural language ('brent oil', 'diesel') or API codes ('WTI_USD'). Returns price, currency, available change fields, and timestamp. For multiple commodities at once, use opa_market_overview. For price trends, use opa_get_history.
| Name | Required | Description | Default |
|---|---|---|---|
| commodity | Yes | Commodity name or code (e.g., 'brent oil', 'natural gas', 'WTI_USD', 'diesel') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world. Description adds that it returns price, currency, change fields, and timestamp, and that values are source-timestamped. Does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, front-loaded sentences cover purpose, usage, input, output, and sibling distinctions with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and no output schema, the description fully covers what the tool does, when to use it, input format, output contents, and when not to use it via sibling references.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and includes description for 'commodity'. Description additionally provides examples and clarifies acceptance of natural language or codes, adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb ('Get'), resource ('latest available, source-timestamped value'), and domain ('energy commodity'). Distinguishes from siblings by naming opa_market_overview and opa_get_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use when the user asks about a single commodity's latest price.' Provides input format guidance and gives alternative tools for multiple commodities or trends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_product_factsGet OilPriceAPI Product FactsARead-only
Get the reviewed, versioned OilPriceAPI product contract for product scope, evaluation offer, pricing URL, freshness policy, catalog and entitlement wording, authentication, canonical first request, keyless demo, and data-rights boundaries. Use this instead of model memory or package prose for questions about OilPriceAPI itself. No API key or paid-data entitlement is required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint, indicating safe, read-only behavior. The description adds context about what information is covered (product contract aspects) and that no authentication is needed, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loaded with the core purpose, and every detail earns its place. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully conveys what the tool returns (a product contract with specific elements) and when to use it. It is complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% by default. The description does not need to explain parameters, and baseline for no parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it gets the 'reviewed, versioned OilPriceAPI product contract' and lists specific aspects like product scope, pricing URL, authentication, etc. It distinguishes from sibling tools by advising to use it for questions about OilPriceAPI itself instead of model memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool: 'for questions about OilPriceAPI itself' and to use it 'instead of model memory or package prose.' It also notes that no API key or paid-data entitlement is required, setting proper expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_rig_countsGet US Rig CountsARead-only
Get the latest US oil and gas rig count data (Baker Hughes). Use when the user asks about drilling activity, rig counts, or oil field operations. Returns oil rigs, gas rigs, total count, and week-over-week change. No parameters needed. Requires the Reservoir Mastery premium tier.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world hints. The description adds valuable context: the premium tier requirement and the Baker Hughes source. It could mention data freshness or update frequency, but with annotations covering safety, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with a distinct role: purpose, usage, and return details/constraints. No fluff or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description covers purpose, usage, returned data, and access requirements. Annotations handle safety, so the description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the baseline is 4. The description explicitly states 'No parameters needed,' which clarifies the tool's invocation and removes any uncertainty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the latest US oil and gas rig count data from Baker Hughes, and explicitly lists the returned fields (oil rigs, gas rigs, total, change). This distinguishes it from siblings like opa_get_drilling by focusing on rig counts and specific data source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use when the user asks about drilling activity, rig counts, or oil field operations.' However, it does not mention when not to use or name alternative tools, so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_spreadGet Refining & Trading SpreadsARead-only
Get refining and trading spreads: crack spreads (refining margin proxy), basis spreads (regional price differentials), and blending/transport margins. Use when the user asks about crack spreads, 3-2-1 crack, refining margins, basis differentials, or blend/transport margins. Requires the Professional plan ($99/mo) or higher.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Spread type: crack (refining crack spread, e.g. 3-2-1), basis (regional/grade price differential), or margin (blending/transport margin). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safe, read-only nature is covered. The description adds valuable behavioral context by specifying the Professional plan ($99/mo) requirement and clarifying the semantics of 'basis' as regional price differentials, going beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences efficiently cover purpose, usage triggers, and plan restriction. Each sentence adds distinct value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with full schema coverage and safe annotations, the description is largely complete. It lacks explicit return format details, but this is not critical for a simple list-like lookup, and the openWorldHint annotation covers potential data variability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the 'type' parameter with enum and descriptions, so the baseline is 3. The description enhances meaning by providing real-world equivalents like '3-2-1 crack' and refining margin proxy, which helps an agent map user intent to the correct enum value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Get refining and trading spreads'. It enumerates the three spread types (crack, basis, margin) and distinguishes itself from sibling price tools by focusing on spreads rather than absolute prices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use when the user asks about crack spreads, 3-2-1 crack, refining margins, basis differentials, or blend/transport margins.' This directly tells the agent when to select this tool over alternatives, and the plan requirement adds a clear prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_storageGet Oil Storage LevelsARead-only
Get oil storage and inventory levels for Cushing, Oklahoma (WTI delivery hub) and/or the US Strategic Petroleum Reserve (SPR). Use when the user asks about oil inventories, storage levels, Cushing stocks, or the SPR. Returns current inventory levels with changes. Requires the Reservoir Mastery premium tier.
| Name | Required | Description | Default |
|---|---|---|---|
| facility | No | Storage facility: cushing (WTI delivery hub), spr (Strategic Petroleum Reserve), or all (default: all) | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds valuable context: it requires the Reservoir Mastery premium tier and states that it 'Returns current inventory levels with changes,' which goes beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. It front-loads the main purpose, then adds usage triggers, return behavior, and access requirement, all efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description adequately covers purpose, when to use, return summary, and access requirements. It lacks a detailed return structure, but no output schema exists; still, the sibling overlap suggests more differentiation would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for the single 'facility' parameter is complete, covering enum values, default, and descriptions. The tool description repeats similar facility information without adding new semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves oil storage and inventory levels for Cushing and/or the SPR, using a specific verb and resource. However, it does not distinguish itself from the similarly named sibling tool 'opa_get_oil_inventories', which likely serves a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use when the user asks about oil inventories, storage levels, Cushing stocks, or the SPR.' This gives clear conditions to invoke the tool, though it does not mention when not to use it or suggest alternatives, especially given the overlapping sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_subscription_eventsPoll Subscription EventsARead-only
Poll for new subscription events — the recurring snapshots recorded by the user's watches. Use this to catch up on what changed since the last poll: pass the since cursor (the seq number) returned by the previous call to get only newer events. Events are POLLED, not pushed — there is no always-on connection, so call this periodically to stay current. Each event carries a price snapshot plus per-code deltas vs the prior snapshot. The returned cursor is what you pass as since next time. REQUIRES an API key (OILPRICEAPI_KEY). This poll does NOT count against the monthly request quota.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Cursor: only return events with a seq greater than this. Use the `cursor` from the previous call. Omit (or 0) to get the earliest available events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations. It explains the polling nature ('Events are POLLED, not pushed'), the data content ('Each event carries a price snapshot plus per-code deltas'), cursor lifecycle ('The returned `cursor` is what you pass as `since` next time'), and authentication ('REQUIRES an API key') and quota info ('does NOT count against the monthly request quota').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, using only 5-6 sentences to convey purpose, usage, behavior, parameter details, and constraints. Every sentence adds value, and the information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter (with schema coverage) and no output schema, the description covers all necessary aspects: what the tool does, how to use the cursor, data content, polling behavior, authentication, and quota implications. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a clear description of the `since` parameter. The description reinforces and expands on it: 'pass the `since` cursor (the seq number) returned by the previous call to get only newer events. Omit (or 0) to get the earliest available events.' This adds practical usage guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Poll for new subscription events — the recurring snapshots recorded by the user's watches.' It uses a specific verb ('poll') and resource ('subscription events'), distinguishing it from sibling tools like opa_get_price or opa_get_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: 'Use this to catch up on what changed since the last poll' and how: 'pass the `since` cursor.' It also notes that events are polled, not pushed, implying periodic calls. However, it does not explicitly mention scenarios where the tool should not be used or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_well_activityGet Recent Well ActivityARead-only
Get recent US well-permit activity including counts by state, top operators and formations, permit types, and weekly trend. The response also includes every non-available state-health record so stale, degraded, unavailable, or attention states are explicit; rankings must not be treated as complete national coverage when warnings exist.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Recent activity window in days (1-365). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and openWorld annotations, the description reveals that responses include every non-available state-health record and that rankings may be incomplete. This adds meaningful behavioral context about data quality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences cover main result content and critical data-limitation warnings without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter aggregate tool with no output schema, the description explains main output categories and caveats. It lacks deeper structural detail but is sufficient for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'days' is fully documented in the schema with 100% coverage, and the description does not add extra semantic detail beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns recent US well-permit activity with enumerated components (counts by state, top operators, formations, permit types, weekly trend). This distinguishes it from siblings like opa_get_well_permits or opa_get_well_production.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for aggregate well-activity overviews but does not explicitly state when to prefer it over alternatives or provide exclusions. It warns about data completeness but lacks explicit alternative-tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_well_permitsGet Well PermitsARead-only
Get the latest US oil & gas well drilling permit data. Use when the user asks about well permits, new drilling permits, permitting activity, or upstream permit trends. Returns the latest permits; optionally filtered/aggregated by state or by operator. Requires the well-permits add-on or an enterprise plan.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Which view to return: latest (most recent permits), by_state (counts aggregated per state), or by_operator (counts aggregated per operator). Default: latest. | latest |
| state | No | Optional US state name or 2-letter code to filter permits (e.g., 'Texas', 'TX'). Applies to the latest and by_state views. | |
| operator | No | Operator name for the by_operator view. For richer filters and explicit freshness metadata, use opa_search_well_permits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it returns the latest permits and supports filtering/aggregation by state or operator. It also reveals an access requirement (add-on/enterprise plan) not covered by annotations. With readOnlyHint already present, the description adds useful functional context, though it doesn't detail response format or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with front-loaded purpose, clear use-case guidance, and a concise summary of return behavior and requirements. Every sentence contributes useful information, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with three optional parameters and no output schema, the description covers purpose, usage context, return behavior, and prerequisites. It is complete enough for an agent to select and invoke correctly, especially with the alternative tool reference in the parameter description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters, so the baseline is 3. The main description only summarizes parameter behavior ('optionally filtered/aggregated by state or by operator') without adding new detail. The operator parameter description does add guidance about an alternative tool, but that is within the schema, not the tool description, and the main description adds minimal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves US oil & gas well drilling permit data, with a specific verb and resource. It also specifies the scope ('latest') and available filters/aggregations, effectively distinguishing it from other well-related tools like production or activity. The sibling search tool is differentiated via the operator parameter description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides use cases ('when the user asks about well permits, new drilling permits, permitting activity, or upstream permit trends') and a prerequisite (well-permits add-on or enterprise plan). The operator parameter description recommends 'opa_search_well_permits' for richer filters, offering clear when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_get_well_productionGet Well ProductionARead-only
Get US oil & gas well production data (BETA coverage: monthly state-level production from EIA + selected state regulators, and well-level histories for selected states only — NOT complete US well-level production). Views: summary (national + top states), states (all reporting states, latest month), state (monthly history for one state), well (monthly history for one well by 14-digit API number), top_producers (highest-output wells, optionally by state), cycle_time (permit-to-production cycle time stats, optionally by state), cohorts (cycle times by spud quarter). Use when the user asks about oil/gas production volumes by state or well, top producing wells, or drill-to-production cycle times. Requires the well-permits add-on or an enterprise plan.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Which view to return: summary (national + top states), states (all reporting states), state (one state's monthly history — requires 'state'), well (one well's monthly history — requires 'api_number'), top_producers, cycle_time, or cohorts. Default: summary. | summary |
| state | No | US state name or 2-letter code (e.g., 'Texas', 'TX'). Required for the state view; optional filter for top_producers and cycle_time. | |
| api_number | No | 14-digit API well number (e.g., '42329447130000'). Required for the well view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it is safe. The description adds valuable behavioral context: BETA coverage, limited well-level histories, availability of multiple views, and the requirement for an add-on/plan. These details go beyond the annotations and help the agent set expectations, though no rate limits or error behavior are disclosed. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long (around 100 words) but every sentence serves a purpose: purpose, coverage caveat, view list, usage scenarios, and access requirements. The use of parentheses and a compact enumeration keeps it structured. It is thoroughly front-loaded with the main verb and resource in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-view tool with no output schema, the description covers the essential ground: data coverage, view semantics, required parameters per view, and plan prerequisites. It doesn't spell out response formats, but the view summaries provide enough for an agent to reason about expected outputs. Minor gaps include lack of error/edge-case behavior, but overall it's complete enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage and already describes each parameter, including the enum values and dependencies. The description reinforces these by explaining what each view returns (e.g., 'monthly history for one state' for the state view, 'highest-output wells' for top_producers). While not adding new parameter syntax, it adds semantic richness beyond the schema, making the baseline 3 become a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get US oil & gas well production data' with explicit scope and a BETA coverage caveat. It enumerates seven distinct views, distinguishing it from sibling tools like opa_get_well_permits or opa_lookup_well. The purpose is specific, verifiable, and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use when the user asks about oil/gas production volumes by state or well, top producing wells, or drill-to-production cycle times.' It also warns about incomplete US well-level production, implying when it's not suitable, but does not explicitly name alternative tools or provide a clear when-not-to-use list. This is a strong 4, missing only explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_list_commoditiesList Available CommoditiesARead-only
List all available commodities that can be queried for prices. Use when the user asks what commodities are available, what codes to use, or when another tool returns a 'commodity not recognized' error. Returns the full catalog fetched live from the API, grouped by category. No parameters needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read (readOnlyHint=true) and open world (openWorldHint=true). The description adds value by clarifying the result is 'fetched live from the API, grouped by category,' providing helpful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences covering purpose, usage, and behavior. Every sentence adds value with no wasted words, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description adequately hints at the return format ('full catalog ... grouped by category'). The tool is simple, and no further details (like pagination) are necessary, making it nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema description coverage, no parameter details are needed. The description adds 'No parameters needed' for clarity, meeting the baseline expectation for a param-free tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all available commodities for price queries, specifying concrete use cases like when the user asks for commodities, codes, or error handling. It naturally distinguishes from siblings that focus on prices, alerts, or other functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool (for commodity availability queries, codes, error handling) and notes no parameters needed. It doesn't explicitly state when not to use or list alternatives, but the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_list_price_alertsList Price AlertsARead-only
List all PERSISTENT price alerts on the user's OilPriceAPI account. Use when the user asks what alerts they have set up, or to find an alert's id before deleting it. REQUIRES an API key (OILPRICEAPI_KEY) — alerts are account-scoped. No parameters needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds value by highlighting that alerts are 'PERSISTENT' and 'account-scoped', informing the agent about state and scope. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both essential: function and usage. No wasted words, front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, description covers key aspects: what, when, prerequisites. Could include what the response contains, but not necessary given low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has zero parameters, baseline is 4. Description states 'No parameters needed', confirming simplicity. Adds no further parameter details as none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List all PERSISTENT price alerts' using a specific verb and resource, distinguishing it from sibling tools like opa_create_price_alert and opa_delete_price_alert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases: 'Use when the user asks what alerts they have set up, or to find an alert's id before deleting it.' Also mentions prerequisite 'REQUIRES an API key (OILPRICEAPI_KEY)'. No explicit alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_list_subscriptionsList Price SubscriptionsARead-only
List all PERSISTENT price subscriptions ('watches') on the user's OilPriceAPI account. Use when the user asks what they're monitoring, or to find a watch's id before deleting it. Each watch is a recurring, account-tied snapshot job. REQUIRES an API key (OILPRICEAPI_KEY). No parameters needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: subscriptions are 'PERSISTENT', 'recurring', 'account-tied snapshot jobs'. No contradiction with readOnlyHint and openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with main action. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, description covers purpose, usage, and prerequisites adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage 100%. Description confirms 'No parameters needed.' Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly indicates verb 'List' and resource 'PERSISTENT price subscriptions'. Distinguishes from sibling tools like opa_list_price_alerts and opa_list_commodities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use (when user asks what they're monitoring or to find watch id) and mentions API key requirement. Lacks explicit when-not-to-use, but acceptable for a simple list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_lookup_wellLook Up Well by API NumberARead-only
Look up a well by 10-, 12-, or 14-digit API number using the core API's promoted lifecycle summaries. Returns operator, county, lifecycle dates, cumulative production and evidence; for a 14-digit API number it also includes exact monthly well-production history when available. Optional state disambiguates API numbers that occur across source contexts. Unpromoted or ambiguous records fail closed.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional state name/code used to disambiguate source records. | |
| api_number | Yes | 10-, 12-, or 14-digit API well number; punctuation is allowed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and openWorld annotations, the description discloses that it uses promoted lifecycle summaries, returns specific fields, includes monthly history for 14-digit API numbers when available, and fails closed for unpromoted or ambiguous records. This adds substantial behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action, and every sentence contributes useful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by listing return fields (operator, county, lifecycle dates, cumulative production, evidence, monthly history) and explaining conditional behavior and fail-closed handling. It is complete for this lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage). The description adds a minor nuance about state disambiguation across source contexts, but does not materially exceed the schema's own explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Look up', identifies the resource as a well, and specifies the API number formats. It distinguishes from sibling tools by stating it returns promoted lifecycle summaries and conditional monthly production history, making its scope clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies when to use the tool (to look up a well by API number) and provides context about optional state disambiguation and fail-closed behavior. It does not explicitly name alternative tools or state when not to use it, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_market_overviewEnergy Market OverviewARead-only
Get current prices for all tracked energy commodities in one call. Use when the user wants a broad market snapshot or asks about overall energy prices. Returns prices grouped by category (oil, gas, coal, refined products, metals, forex) with 24h changes. Supports filtering by category. For a single commodity, use opa_get_price instead.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by commodity category (default: all). Options: oil, gas, coal, refined, metals, forex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint: true, openWorldHint: true) and adds context about grouping by category with 24h changes. No contradictions; extra behavior is non-critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, usage guidance, and output description. Front-loaded with key information, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description covers purpose, usage, and basic output structure. It omits details like response format limits, but annotations mitigate need for full specification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the category parameter (enum values, default, filter purpose). The description merely restates 'Supports filtering by category' and lists categories in output context, adding minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get current prices for all tracked energy commodities in one call.' It specifies the resource (energy commodities) and action (get prices), and distinguishes from the sibling opa_get_price for single commodity queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'when the user wants a broad market snapshot or asks about overall energy prices.' It also provides an alternative: 'For a single commodity, use opa_get_price instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opa_search_well_permitsSearch Well PermitsARead-only
Search well permits in one US state by county or operator and optional permit-date range. The tool checks the core API's measured state-health gate first, fails closed for unavailable/attention states, and always returns freshness, date coverage, source provenance, and any staleness/degradation caveat with the records. Operator and county filters currently require separate searches.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| state | Yes | Required US state name or 2-letter code, e.g. Texas or TX. | |
| county | No | Optional county-name search. Cannot be combined with operator. | |
| end_date | No | Optional inclusive permit-date upper bound (YYYY-MM-DD). | |
| operator | No | Optional operator-name search. Cannot be combined with county. | |
| per_page | No | ||
| start_date | No | Optional inclusive permit-date lower bound (YYYY-MM-DD). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several behavioral traits beyond the readOnlyHint and openWorldHint annotations: it checks a state-health gate and fails closed for unavailable/attention states, and it always returns freshness, date coverage, source provenance, and staleness/degradation caveats. It also explicitly notes that operator and county searches are separate. This is rich behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and each sentence serves a distinct purpose: purpose/scope, behavioral safety/metadata guarantees, and usage constraint. It is front-loaded with the core purpose and avoids any filler, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by mentioning that results include freshness, date coverage, provenance, and caveats. It also covers the state-health gate and separate-search constraint. However, it omits pagination details (page/per_page parameters), which is relevant for a search tool. Still, it is sufficiently complete for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the schema already documents most parameters. The description adds the 'county or operator' and 'optional permit-date range' context and reinforces that they cannot be combined, but it does not provide substantial new meaning beyond the schema's own parameter descriptions. It meets the baseline but does not elevate it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Search well permits in one US state by county or operator and optional permit-date range,' which specifies a clear verb (search), resource (well permits), scope (one US state), and filter dimensions. It distinguishes from siblings like opa_get_well_permits and opa_lookup_well by emphasizing the search-by-county/operator behavior and the single-state constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context by stating that operator and county filters cannot be combined and require separate searches. However, it does not explicitly say when to choose this tool over alternatives like opa_get_well_permits or opa_lookup_well, nor does it mention any exclusions. The guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose. Even tools like opa_get_price, opa_compare_prices, opa_market_overview, and opa_get_market_brief are well-differentiated by descriptions, with unique use cases (single price, comparison, broad overview, brief with narrative). No overlap causes ambiguity.
All tools follow a consistent pattern: 'opa_' prefix followed by a verb_noun combination (e.g., compare_prices, create_price_alert, get_diesel_by_state). Naming conventions are uniform throughout, with no mixing of styles.
26 tools is on the higher end, but the domain (energy commodities) requires many distinct data types (spot, futures, history, forecasts, drilling, storage, etc.). Each tool earns its place, though the count could be slightly reduced if some overlap is merged.
The tool set comprehensively covers the energy commodity domain: spot prices, comparisons, historical data, futures curves, forecasts, market briefs, alerts, subscriptions, drilling activity, rig counts, well permits, OPEC production, inventories, storage, and marine fuels. No obvious gaps are present for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Commodity price indices, forward curves and catalog search. Requires a General Index account.
Real-time and historical price feeds for 500+ crypto, equities, FX, and commodities assets.
Query cryptocurrency on-chain data, OHLCV prices, market data, and Research & QuickTake insights.
Real-time electricity price signals for AI agents. Spot prices, cheapest hours, and contract recommendations. 31 countries across Europe and Oceania. No authentication required.
Related MCP Servers
- FlicenseAqualityDmaintenanceProvides access to U.S. Energy Information Administration (EIA) data, covering electricity grid operations, retail sales, and natural gas production metrics. It enables natural language querying of energy market statistics, infrastructure profiles, and real-time balancing authority data.146
- FlicenseNot gradedqualityDmaintenanceExposes energy market signals and readiness indices by integrating data from sources like Yahoo Finance, ENTSOG, and AGSI+. It enables users to query gas flows, storage levels, power prices, and weather data via natural language.
- AlicenseNot gradedqualityCmaintenanceEnables real-time access to US electricity generation, fuel mix, and demand data through natural language queries.15MIT
- FlicenseNot gradedqualityBmaintenanceProvides real-time electricity prices, cheapest hours, and contract comparison for 40+ countries, enabling AI agents to make energy-aware decisions.2
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/OilpriceAPI/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server