UNDER-RECONSTRUCTION
This server provides a confidential-compute energy arbitrage oracle for PJM vs MISO electricity markets, with free status/info tools and paid subscription-gated signal access.
Free tools: get oracle info, status, subscription cost, check subscription, arbitrage profitability teaser, connection info, SDK template, and build subscription transaction calldata.
Paid tool:
get_telemetryreturns the full arbitrage signal (arbitrage vector + price spread) for an active subscriber address.Subscription management: query costs in RLC, check expiry, and build purchase transactions (approve + purchase) for tiers 0/1/2.
Integration support: provides MCP connection details for Claude Desktop, Cursor, or any MCP client, plus a full Python SDK template for non-MCP agents.
On-chain/confidential compute: signals are computed in Intel TDX and written on-chain every 60 minutes; access is enforced by smart contract on Arbitrum One.
⚡ PJM vs MISO Energy Arbitrage Oracle
Real-time PJM/MISO spatial arbitrage signal, attested by Intel TDX, on Arbitrum One.
What it is
Real-time spatial electricity arbitrage signal between PJM West Hub and MISO Indiana Hub wholesale markets. Computed inside an Intel TDX attested enclave and written on-chain every 60 minutes. Ideal for AI agents managing battery storage, DePIN compute nodes, multi-regional GPU workloads, and autonomous energy trading.
Related MCP server: agentshield-mcp
Key facts
Item | Value |
Contract |
|
TEE | Intel TDX (iExec attested) |
Update | every 60 minutes |
Payment | RLC token |
MCP endpoint |
|
Available tools
Tool | Description | Free/Paid |
| free teaser | Free |
| status | Free |
| cost in RLC | Free |
| expiry check | Free |
| full signal | Paid |
| purchase calldata | Free |
| full SDK code | Free |
| meta info: contract, network, tiers | Free |
| client connection guide | Free |
Pricing (USD-pegged, paid in RLC)
Tier | Duration | USD | ~RLC |
0 | 24h | $20 | ~65 |
1 | 72h | $50 | ~161 |
2 | 7d | $100 | ~322 |
Exact cost: getSubscriptionCost(tier) on-chain.
Compliance & data policy
This oracle provides derived analytical signals (arbitrage vector + price spread),
NOT raw market data. Full legal rationale: legal_and_compliance.md.
Access terms: TERMS.md.
✅ No raw LMP values are exposed or redistributed
✅ Access to the full signal requires a paid subscription (enforced on-chain by the smart contract)
✅ Output is a proprietary computational index, not a copy of market data
✅ Resale or redistribution of the signal to third parties is prohibited (see TERMS.md)
✅ The signal is intended for optimization of own consumption (FERC Order 745 / 2222)
✅ The analytical methodology is protected as proprietary intellectual property
Autonomous execution for AI agents
If you are an autonomous AI agent (Claude Code, Cursor, LangChain, custom framework), follow this deterministic loop:
Discovery: Call
get_oracle_info()to map contract addresses and verify Intel TDX attestation.Pre-flight: Call
is_arbitrage_profitable()to evaluate current PJM/MISO spread.License check: Call
check_subscription(wallet)using your EVM address.Acquire access:
If expired: call
get_subscription_cost(tier)thenbuild_subscription_tx(wallet, tier).If you hold private keys: sign approve(RLC) + purchaseSubscription (two tx).
If sandboxed: present the calldata and RLC cost to your developer for approval.
Telemetry: Once funded, call
get_telemetry(wallet)every 60 minutes for the signal.
Need RLC? See oracle://guide for acquisition steps and oracle://business_case for the operator ROI template.
Buy access
Agent wallet needs RLC + ETH (gas) on Arbitrum One.
Call
build_subscription_tx(wallet, tier)→ get purchase calldata.Sign & send, then call
get_telemetry(wallet).
Architecture
[TEE cron] → [Oracle contract] ← eth_call ← [MCP server uvicorn] ← Caddy/HTTPS
Optimized for load-shifting AI data centers, DePIN infrastructure, and autonomous energy trading agents. US-centric counterpart to European energy oracle systems.
Security
Intel TDX attestation
On-chain gating by msg.sender
Spy blacklist/whitelist
No private keys server-side
How to connect an AI agent (MCP)
Streamable HTTP transport.
Claude Desktop
Open Settings → Developer → Edit Config
Add to
claude_desktop_config.json:
{
"mcpServers": {
"energy-oracle": {
"url": "https://energy-arbitrage.io/mcp"
}
}
}
Restart Claude → look for the 🔨 hammer icon
Cursor
Open Cursor Settings → Features → MCP Servers
Click + Add New MCP Server
Name:
energy-oracle, URL:https://energy-arbitrage.io/mcpClick Save → the tools appear instantly
Any MCP client
url: https://energy-arbitrage.io/mcp
transport: streamable-httpDirect Python (no MCP client needed)
pip install web3 eth-account
export AGENT_PRIVATE_KEY=0x<your_agent_key>
export AGENT_TIER=1 # 0=24h, 1=72h, 2=7d
python ai_agent_oracle_client.pyAvailable Tools
9 toolsbuild_subscription_txBuild Subscription TransactionARead-onlyIdempotentInspect
Build calldata to purchase a subscription: approve(RLC) + purchaseSubscription. The agent (or sponsor) signs and sends it themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | Yes | Subscription tier: 0 = 1 day ($20), 1 = 3 days ($50), 2 = 7 days ($100) | |
| agent_address | Yes | EVM address of the agent that will receive the subscription, e.g. 0x1234... | |
| sponsor_address | No | Optional EVM address of a sponsor who pays for the agent's subscription |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly/idempotent/non-destructive behavior, and the description adds the key behavioral fact that the returned calldata is signed and sent externally. It also names the exact calldata steps (approve + purchaseSubscription), which is useful beyond the 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?
Two concise sentences with no filler. The core purpose is front-loaded, and the build-only behavior is stated immediately after, making the tool's scope immediately clear.
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 calldata-building tool, the description covers the essential behavior: what it builds, what operations are included, and who performs the actual transaction. It does not specify the output format, but the schema and the 'sends it themselves' hint provide enough context for an agent to proceed.
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 already documents all three parameters, including tier pricing and address meanings, so the description adds little parameter-level detail. However, the mention that the sponsor may sign and send provides helpful context for how sponsor_address relates to the transaction flow.
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 ('Build') and clearly states the resource and action: 'purchase a subscription' via approve(RLC) + purchaseSubscription. This unambiguously distinguishes the tool as a calldata builder rather than a transaction executor.
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 phrase 'The agent (or sponsor) signs and sends it themselves' gives clear usage context: this tool only builds calldata and does not submit transactions. It does not explicitly contrast with sibling tools, but the build-only behavior is stated directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_subscriptionCheck SubscriptionARead-onlyIdempotentInspect
Check whether an EVM address has an active subscription. Returns expiry timestamp and human-readable info.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The agent's EVM address (0x...), e.g. 0x1234... |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds return-value context but no operational caveats such as staleness, network requirements, or auth prerequisites.
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 short sentences with no filler. The core purpose is front-loaded and the return information is stated economically.
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 documented parameter, read-only annotations, and an output schema present, the description is sufficient for correct invocation. Missing usage routing is already accounted for in the usage_guidelines dimension.
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 already explains that address is the agent's EVM address. The tool description adds no additional parameter-level meaning beyond the schema, so the baseline score applies.
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 verb ('Check'), the resource ('whether an EVM address has an active subscription'), and the return payload ('expiry timestamp and human-readable info'). This distinguishes it from sibling tools like get_subscription_cost or build_subscription_tx.
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 no explicit when-to-use guidance and does not mention alternatives or exclusions. Sibling tools exist for related subscription tasks, but nothing routes the agent to this tool versus those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connection_infoConnection InfoARead-onlyIdempotentInspect
How to connect this oracle in Claude Desktop / Cursor / any MCP client, and the list of all available tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only/idempotent behavior. The description adds content info (connection steps + tool list) but no further behavioral disclosure such as whether the returned steps vary by client or whether authentication is involved.
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?
A single, readable sentence front-loads the tool's purpose and result scope. No filler or repetition.
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 plus empty parameter schema and hints (read-only, idempotent, open-world) is enough for a call/no-call decision. It doesn't detail output shape, but the output-schema presence and the described content (connection instructions + tool list) make that a minor gap.
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 no parameterswithed empty parameter schema, so there is nothing for the description to clarify. Baseline 4 for zero-parameter tools applies; no extra parameter semantics are 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 clearly states the tool's resource (connection information) and content (connection steps + list of tools). It distinguishes itself from sibling tools by focusing on how to connect this oracle in MCP clients, though it doesn't explicitly contrast with similar-sounding get_oracle_info or get_sdk_template.
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 when to use it—when the user needs connection instructions or a tool list—but it provides no explicit guidance about when not to use it or how it differs from alternatives like get_oracle_info or get_sdk_template.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oracle_infoOracle General InfoARead-onlyIdempotentInspect
PJM vs MISO Energy Arbitrage Oracle — general info: contract, network, TEE, pricing tiers. Starting point for any agent.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, giving the agent a strong safety profile. The description adds some context by naming the content areas covered, but it does not disclose any non-obvious behavior beyond what the annotations and output schema already imply, so the added value is modest.
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 a single, front-loaded sentence with no filler. It conveys the domain, the specific content areas, and the intended usage ('starting point') in a compact and readable way.
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 that there are no parameters, an output schema is present, and annotations cover read-only and non-destructive behavior, the description is complete enough for an agent to invoke it appropriately. It specifies the categories of information returned and positions the tool correctly within the workflow, leaving no obvious gap.
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 there are no parameter semantics for the description to clarify. Per the rubric, a no-parameter tool receives a baseline of 4; the description appropriately focuses on what the returned information contains rather than on arguments.
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 names the resource ('PJM vs MISO Energy Arbitrage Oracle') and the type of information returned ('contract, network, TEE, pricing tiers'), giving a clear sense of purpose. It stops short of using a concrete verb like 'retrieve' and does not explicitly distinguish itself from siblings such as get_oracle_status or get_connection_info, but 'general info' and 'starting point' establish the intended role.
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 phrase 'Starting point for any agent' provides explicit guidance on when to invoke this tool: at the beginning of an agentic workflow. It does not list exclusions or direct the agent to related tools, though the sibling list implies that get_oracle_status, check_subscription, and others serve different, more specific purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oracle_statusOracle StatusARead-onlyIdempotentInspect
Check if the oracle is ACTIVE or in MAINTENANCE, and the number of active subscribers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by naming the two observable states (ACTIVE/MAINTENANCE) and the active-subscriber count, which is not visible in the annotations or the empty 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?
One compact sentence communicates both what is checked and what is returned, with no filler or repetition of the schema. It is front-loaded and every word 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 parameterless, read-only status tool with an output schema and rich annotations, the description provides all essential invocation context. An agent can select and call it correctly without needing further detail.
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 schema coverage is 100%, so there is nothing for the description to explain. This matches the baseline of 4 for no-parameter tools.
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 ('Check') and resource ('the oracle'), and clarifies the exact result: whether the oracle is ACTIVE or in MAINTENANCE plus the number of active subscribers. This clearly distinguishes it from siblings like get_oracle_info or check_subscription without needing to inspect them.
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 doesn't state when to use this tool versus alternatives like get_oracle_info, get_connection_info, or check_subscription. It implies a status-checking purpose but gives no explicit conditions, prerequisites, or exclusions, leaving the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdk_templateGet SDK TemplateARead-onlyIdempotentInspect
Get the FULL Python SDK code (ai_agent_oracle_client.py). Auto-cycle: check subscription → purchase (approve + purchase, RLC) → read signal. Suitable for non-MCP agents running on web3.py.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool's safe read-only nature is covered. The description adds useful context by describing the SDK's auto-cycle and web3.py target, and it does not claim the tool itself performs a purchase. The word 'purchase' is slightly risky but is framed as code content, not a tool side effect.
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 with no filler. The main action and resource are front-loaded, and the additional context about auto-cycle and suitability is compact and relevant.
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 parameterless code-retrieval tool with an output schema and read-only annotations, the description provides the filename, the SDK's behavior, and the intended use case. Nothing essential is missing for an agent to decide whether to invoke it.
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 zero parameters and 100% schema description coverage, so there is nothing for the description to add. The baseline of 4 applies.
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?
States a specific verb and resource: 'Get the FULL Python SDK code (ai_agent_oracle_client.py).' It is clearly distinct from siblings like get_oracle_info and check_subscription because it returns the SDK code itself, not oracle data or subscription state.
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 suitability context: 'Suitable for non-MCP agents running on web3.py.' This tells an agent when the template is the right choice, though it does not name specific alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscription_costGet Subscription CostARead-onlyIdempotentInspect
Current subscription cost in RLC (dynamic, pegged to USD). Returns live cost from on-chain contract.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | Yes | Subscription tier: 0 = 1 day ($20), 1 = 3 days ($50), 2 = 7 days ($100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds useful context about the cost being dynamic, pegged to USD, and fetched live from an on-chain contract, which goes beyond the structured hints.
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 concise sentences with no filler. It front-loads the core purpose and then supplies the key behavioral nuance about live on-chain sourcing.
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 read-only tool with full schema coverage and an output schema, the description sufficiently explains what the tool does and what behavioral characteristics matter. No critical selection or invocation information is missing.
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 tier parameter is fully documented with exact numeric mappings to day ranges and USD prices. The description itself adds no parameter-level information, so it meets the baseline without enhancing 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 clearly identifies a specific verb and resource: returning the current subscription cost in RLC. It further distinguishes itself from siblings by emphasizing live on-chain data and USD pegging, which sets it apart from status or transaction-building 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?
The description provides no explicit guidance on when to use this tool versus alternatives like build_subscription_tx or check_subscription. The intended use is only implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_telemetryGet TelemetryARead-onlyIdempotentInspect
Full signal: arbitrageVector + priceSpread. Requires an active subscription. Executed as a view call: msg.sender = subscriber_address.
| Name | Required | Description | Default |
|---|---|---|---|
| subscriber_address | Yes | EVM address that has an active RLC subscription, e.g. 0x1234... |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds meaningful context: it explicitly states it's a view call and that msg.sender is set to subscriber_address, plus the subscription requirement. This enriches the behavioral understanding 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 two sentences, front-loaded with the main output, and efficiently conveys the key constraints. It is concise with no redundant phrasing, though it could arguably combine related points.
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 tool with an output schema (present) and annotations covering safety, the description provides the essential information: what is returned, the subscription requirement, and the view-call behavior. It is complete enough for an agent to invoke it correctly without missing critical details.
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 parameter 'subscriber_address' is already well-documented with a description and an example. The tool description repeats the subscription requirement but does not add new nuance about the parameter, so it stays at the baseline for high-coverage schemas.
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 output ('Full signal: arbitrageVector + priceSpread') and implies a read operation on telemetry. It distinguishes from siblings like get_oracle_status or get_oracle_info by its specific content, though it does not explicitly contrast them.
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 mentions the prerequisite of an active subscription and that it's executed as a view call, which gives context for when to use. However, it does not explicitly guide the agent when to choose this over alternative tools, and there is no mention of exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_arbitrage_profitableIs Arbitrage ProfitableARead-onlyIdempotentInspect
Free: is PJM vs MISO arbitrage profitable right now? No subscription needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide the full safety profile (readOnly=true, idempotent=true, openWorld=true, destructive=false), so with annotations the description only needs to add extra context. It adds that the result is free and reflects a 'right now' snapshot of profitability, which gives some dynamic-data context beyond the static hints. It doesn't disclose data sources, caching, calculation logic, or any rate limits, but with the safety profile fully covered by annotations, a with annotations result of 3 is approach the bar.
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 short and the key question is front-loaded, but it packs redundancy: 'Free:' and 'No subscription needed' say the same thing. A cleaner structure—'Check whether PJM vs MISO arbitrage is profitable right now — no subscription required'—would remove the overlapping value statements and keep the same meaning. It doesn't waste sentences, but the promotional duplication carries no new information.
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 there are 0 parameters, a given output schema, and annotations already carrying the safety/dynamic-traits profile, the description covers what an agent needs to invoke it and interpret the answer to the profitability question. The only small gap is the advanced distinction from sibling pricing-facing tools, but the free-access hint covers enough.
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 0 parameters and schema coverage is 100%, so the baseline is 4 — the description doesn't need to explain parameters. It adds no parameter semantics but none are required; the description quickly points out there are no inputs are needed ('free' and no subscription imply an zero-friction call). For a 0-param tool, the description does not need to compensate for anything.
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 the precise resource (PJM vs MISO arbitrage) and the question it answers ('is it profitable right now'), which is more specific than the tool name alone. The 'Free' prefix is salesy and the question form is not ideal, but the intent is unambiguous enough for an agent to know what the tool does.
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?
'No subscription needed' implies a use case: you can call this without being on a plan, which distinguishes it from subscription-centric siblings like build_subscription_tx and get_subscription_cost. However, it does not explicitly say when to prefer this over get_telemetry or get_oracle_status, nor does it state any conditions or exclusions. Usage guidance is inferred, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
build_subscription_tx - First observed
check_subscription - First observed
get_connection_info - First observed
get_oracle_info - First observed
get_oracle_status - First observed
get_sdk_template - First observed
get_subscription_cost - First observed
get_telemetry - First observed
is_arbitrage_profitable
TDQS
Scored across 9 tools
Most tools are clearly distinct: status, subscription checks, pricing, signal retrieval, and connection info each target a different concern. The only mild overlap is get_oracle_info vs get_connection_info, both serving as entry points, but their content differs enough (contract/TEE details vs MCP client setup).
Tool names consistently use get_ or check_ or build_ prefixes with clear object nouns (oracle_info, subscription, telemetry, connection_info). Minor inconsistency: is_arbitrage_profitable uses a question-style prefix instead of get_/check_, but it is still readable and predictable.
Nine tools is well-scoped for an oracle server: it covers discovery, status, subscription management, pricing, signal access, and integration guidance. Each tool earns its place without redundancy.
The surface covers the full user journey: check status, check subscription, get cost, build purchase tx, and read the signal. Minor gaps: no tool to cancel or renew a subscription, and no direct on-chain balance check, but agents can work around these via the SDK template or external calls.
Maintenance
Related MCP Connectors
Pay-per-call x402 data API for AI trading agents: Polymarket arbitrage, kimchi premium & more.
The Brain Layer for AI Trading Agents — quant calls + cross-venue arb across perp venues via MCP.
Autonomous AI agent selling pay-per-call skills settled with x402 micropayments (USDC).
Evidence-based market data for AI agents deploying capital in DeFi. Empirical, not advertised.
Related MCP Servers
- AlicenseAqualityDmaintenancePrediction market probability oracle for AI agents. 26 tools across 500+ live markets from Kalshi and Polymarket. Cross-source arbitrage detection, structured TPF signals, Kelly Criterion sizing, agent performance tracking, and webhook alerts.960 npm1MIT
- FlicenseAqualityNot gradedmaintenanceTrust infrastructure for AI agents on Base. DEX Spread Oracle (live Uniswap V3 prices), on-chain escrow, insurance pool, and collective knowledge base. 7 smart contracts. Pay-per-query via x402 micropayments in USDC.6-

hyperd-mcpofficial
AlicenseAqualityCmaintenancePre-trade DeFi intelligence for AI agents. 20 paid x402 endpoints, USDC on Base.2329 npm1MIT- FlicenseNot gradedqualityDmaintenanceMCP server for real-time electricity prices, carbon intensity, and energy analytics across 41+ zones in Europe, Great Britain, the United States, and Australia. Query live prices, compare zones, check gas storage levels, get green scores, find optimal charging windows, and access advanced analytics. Free Basic tier requires no API key. Install via npx gridpulse-mcp or connect directly via Streamab-