Molpha MCP
OfficialEnables AI agents to create, fetch, verify, and publish Molpha oracle data on Solana, including deriving feed IDs, reading feed state, submitting signed data updates, and reading latest values from Solana feed accounts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Molpha MCPfetch verified ETH/USD price on Solana"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Molpha MCP
A Model Context Protocol (MCP) server that lets AI agents create, fetch, verify, and publish Molpha oracle data.
Molpha turns HTTP API responses into threshold-signed payloads that can be verified on Solana, EVM, and Starknet. This server exposes that workflow as a small set of MCP tools and keeps signing behind a local, Privy, or Turnkey-backed wallet.
This release targets Solana Devnet and Sepolia verifier networks. Treat it as testnet software, not a production security boundary. Write tools spend SOL and may consume subscription quota unless dry-run mode is enabled.
What you can do
Discover the active registry, oracle nodes, gateways, and verifier deployments.
Derive a feedId locally from a declarative API spec — no transaction, no subscription required. Feeds are created lazily on first settle.
Request a threshold-signed result and build verifier arguments for multiple chains, paid for either by an active USDC subscription or a self-funded x402 round.
Build EVM/Starknet verifier call args, or submit a verified update to a Solana feed.
Use a local keypair, Privy server wallet, or Turnkey wallet without changing the MCP tool surface.
Put daily caps and a global dry-run default around agent-initiated writes and x402 spend.
Related MCP server: Pangle Coordinator
MCP tools
Tool | Access | Description |
| Read | Return the registry version, node set, gateways, chains, verifier metadata, and x402 caps. |
| Read | Read a feed's on-chain state and subscription status. Pass |
| Read | Locally derive a feedId from |
| Read | Read the x402 agent escrow (USDC balance, committed amount, quoted next price) for the current signer. |
| Read/quota/spend | Run a signing round and return the signed artifact plus verifier arguments. |
| Read | Read the latest value stored in a Solana feed account. |
| Read | Build EVM/Starknet verifier address and call arguments (calldata only, by design). |
| Write | Submit a signed data update to Solana. Accepts the |
molpha_verify stops at calldata by design: the Molpha verifier is stateless, so the agent executes verify() itself and the server never submits an EVM/Starknet transaction or vouches for a result it did not verify on-chain. Solana is the one leg this server settles — via molpha_execute or molpha_fetch_verified's autoSubmit — and there is no standalone Solana verify-simulation path; submit, then read the result back with molpha_get_latest.
molpha_execute and molpha_verify take the molpha_fetch_verified response as-is: no field remapping between calls, and short hex fields (the gateway emits a one-signer signersBitmap as "4") are zero-padded to their canonical widths server-side.
Quick start
Requirements
Node.js 20 or later
A Solana wallet funded with Devnet SOL
Devnet USDC if you plan to use an active subscription or the x402 pay-per-request path
An MCP client such as Cursor, Claude Desktop, or Codex
1. Install and build
git clone https://github.com/molpha/mcp.git
cd mcp
npm ci
cp .env.example .env
npm run build2. Configure a signer
For local development, point OWNER_KEYPAIR at a Solana JSON keypair. Use an absolute path when an MCP client launches the server.
SIGNER_BACKEND=memory
OWNER_KEYPAIR=/absolute/path/to/owner-keypair.json
SOLANA_RPC=https://api.devnet.solana.com
GATEWAY_ENDPOINTS=The same wallet owns feeds and any x402 escrow, authenticates gateway requests, and signs Solana transactions. Do not commit .env, wallet files, or credentials.
Other supported signer configurations:
Backend | Required configuration |
Local keypair |
|
Privy |
|
Turnkey |
|
See .env.example and the ready-to-edit files in examples for every backend.
3. Check the setup
npm run doctorThe doctor checks the compiled entry point, signer configuration, wallet availability, and Solana RPC. It also prints configuration snippets with resolved absolute paths.
4. Bootstrap a subscription
Subscription operations debit USDC, so they are deliberately kept out of the MCP tool surface. Run the provisioning CLI once with the same signer configuration used by the server:
# Preview without sending a transaction
npm run provision -- subscribe --plan Basic --max-price-usdc 20000000 --dry-run
# Subscribe, with a maximum approved price of 20 USDC (6 decimals)
npm run provision -- subscribe --plan Basic --max-price-usdc 20000000Extend an existing subscription with:
npm run provision -- extend --max-price-usdc 20000000--max-price-usdc is a safety cap in raw USDC base units, not a quoted plan price. The transaction aborts if the live on-chain price exceeds the cap.
5. Connect an MCP client
Pick one of the install paths below. In both cases the server speaks stdio JSON-RPC and needs the same signer settings from step 2.
Claude Desktop (MCPB)
Package the built tree into an MCP Bundle and install it as a desktop extension. The repo already includes a manifest.json that declares the Node entry point, tools, and user-config fields.
npm run build
npx @anthropic-ai/mcpb pack . molpha-mcp.mcpbThat writes molpha-mcp.mcpb in the repo root. Install it in Claude Desktop by any of:
Double-click the
.mcpbfileDrag it into the Claude Desktop window
Settings → Extensions → Advanced settings → Install Extension… → select the
.mcpbfile
During install, set the signer backend and related fields (local keypair path, Privy, or Turnkey). Those map to the same env vars as .env.example.
Cursor, Codex, or manual Claude Desktop config
Point the client at the built server (dist/src/server.js), not at src/server.ts:
{
"mcpServers": {
"molpha": {
"command": "node",
"args": ["/absolute/path/to/mcp/dist/src/server.js"],
"env": {
"SIGNER_BACKEND": "memory",
"OWNER_KEYPAIR": "/absolute/path/to/owner-keypair.json",
"SOLANA_RPC": "https://api.devnet.solana.com"
}
}
}
}Cursor: save the JSON under
mcpServersin.cursor/mcp.jsonor~/.cursor/mcp.json. Ready-to-edit copies live in examples (cursor-memory.mcp.json,cursor-privy.mcp.json,cursor-turnkey.mcp.json).Claude Desktop: add the same block to
claude_desktop_config.jsonand restart, or prefer the MCPB path above.Codex: use one of the Codex TOML examples, or run
codex mcp add molpha -- node /absolute/path/to/mcp/dist/src/server.jsand then add the signer variables toconfig.toml.
Restart the client after changing configuration or rebuilding. A direct node dist/src/server.js invocation waits silently for JSON-RPC on stdin; that is expected for a stdio server.
Example prompts
Once the server is connected, these prompts exercise the main workflows.
Discover the network
Use Molpha to inspect the current oracle capabilities. Summarize the registry version, node count, supported chains, gateway endpoints, and verifier addresses. Do not make any writes.
Preview a feed
Derive a Molpha feedId for
https://api.example.com/v1/finalized/priceusing the JSON path$.priceand 3 required signatures. Show me the API config hash, the derived feedId, and any determinism warnings. Do not send a transaction.
Replace the example URL with a public endpoint that returns stable, independently reproducible data. Live ticker endpoints may produce different values across oracle nodes and fail to reach quorum.
Fetch and verify a result
For that same feed, fetch a signed result with
payment: "auto"and a maximum age of 60 seconds, for the EVM chain. Summarize the signed value, timestamp, registry version, quorum, and EVM verifier call, and tell me whether it was paid for via subscription or x402. Treat the signed artifact as the trust anchor; do not trust the value by itself.
Check x402 spend before paying
Call
molpha_agent_statusfor 3 required signatures. Tell me the escrow's USDC balance, committed amount, and quoted next price before I authorize any x402 spend.
Publish with an approval checkpoint
Read the latest value for Molpha feed
<FEED_ID>. If I provide a newer signed result, previewmolpha_executewithdryRun: true, explain the fee-paying wallet and exact write, and wait for my confirmation before submitting it to Solana.
Architecture
flowchart LR
Client["MCP client<br/>Cursor · Claude · Codex"] <-->|"stdio / JSON-RPC"| Server["Molpha MCP server"]
Server --> Guardrails["Write guardrails<br/>dry-run · daily caps · x402 spend caps"]
Server --> Signer["Signer adapter"]
Signer --> Memory["Local keypair"]
Signer --> Keychain["Privy or Turnkey"]
Server --> SDK["Molpha SDK"]
Server --> X402["x402 client<br/>escrow funding · AgentRequestAuth"]
SDK --> Gateway["Molpha gateway<br/>subscription round"]
X402 --> Gateway2["Molpha gateway<br/>x402 agent round"]
Gateway <--> Nodes["Oracle node quorum"]
Gateway2 <--> Nodes
SDK <--> Solana["Solana program<br/>feeds · subscriptions · agent escrows"]
X402 <--> Solana
Gateway --> Artifact["Threshold-signed<br/>data update"]
Gateway2 --> Artifact
Artifact --> Server
Server --> Args["EVM / Starknet verifier args,<br/>or submit_data_update on Solana"]The server is an adapter and policy boundary, not a new source of truth:
The MCP client invokes a typed tool over stdio.
The signer authenticates gateway requests and owner transactions.
Oracle nodes independently fetch the committed API configuration and produce one aggregate signature after reaching quorum.
The server returns the self-contained signed artifact. Solana can verify or store it; EVM and Starknet consumers receive contract-ready verifier arguments.
Consumers trust a value only after verifying the signed payload against its registry version.
Provisioning is a separate CLI path because subscribing or extending debits USDC. It is never available to an autonomous MCP tool call.
Configuration
Variable | Default | Purpose |
|
|
|
| — |
|
| — | Local Solana JSON keypair path |
|
| Solana RPC endpoint |
|
| Comma-separated Molpha gateway base URLs (not your Solana RPC). Must expose |
|
| Comma-separated EVM verifier networks |
|
| Comma-separated Starknet verifier networks |
|
| Process-local daily Solana-submit cap |
|
| Preview all writes when set to |
|
| Refuse to fund an x402 round priced above this (decimal USDC) |
|
| Process-local daily x402 spend cap (decimal USDC) |
| — | Optional: skip the x402 discovery round-trip when the gateway's PDA is known out of band |
The daily counters are process-local and reset when the server restarts. They are safety rails, not durable rate limits.
x402 pay-per-request
molpha_fetch_verified accepts a payment argument:
"subscription"— use the caller's active USDC subscription (see Bootstrap a subscription). Fails if the subscription is inactive or out of quota."x402"— self-fund the round from a per-signer escrow account, with no subscription required. If the escrow is underfunded, the MCP server funds it from the signer's own USDC balance (creating the escrow's associated token account if needed) up toMOLPHA_X402_MAX_PRICE_USDCper round andMOLPHA_X402_MAX_SPEND_PER_DAY_USDCper day, then refuses with a clear error above those caps."auto"(default) — use the subscription when active, otherwise fall back to"x402".
Call molpha_agent_status to inspect the escrow (USDC balance, amount already committed to unsettled rounds, and the quoted price for a given quorum) before spending, or to confirm a round settled. encryptSecrets (private API secrets) is not yet supported on the x402 path — use payment: "subscription" for feeds with encrypted secrets.
Development
npm run dev # start from TypeScript for local development
npm run typecheck # validate types without emitting files
npm test # run the Vitest suite
npm run build # compile src/, cli/, and tests into dist/Before opening a pull request, run:
npm run typecheck && npm test && npm run buildBug reports and focused pull requests are welcome. For security issues, use GitHub's private vulnerability reporting instead of a public issue.
Releasing
Versioning and publishing are automated with Changesets. If your pull request changes published behavior, add a changeset:
npx changesetThis records the bump type (patch/minor/major) and a changelog entry. On merge to main, .github/workflows/release.yml:
Opens or updates a "Version Packages" pull request that bumps
package.json,manifest.json, andserver.jsonin lockstep and updatesCHANGELOG.md.When that PR is merged, publishes
@molpha/mcpto npm using trusted publishing (GitHub Actions OIDC — no npm token in CI), then publishesserver.jsonto the MCP registry usingmcp-publisherwith GitHub OIDC login.
No secrets are needed for either publish step; both rely on the workflow's id-token: write permission and are authorized via each registry's trust relationship with this repository.
Documentation
MCPB manifest for Claude Desktop /
.mcpbpackaging
License
Released under the MIT License.
Available Tools
8 toolsmolpha_agent_statusGet x402 agent escrow statusA
Read the caller's x402 agent escrow (advisory: USDC ATA balance, amount committed to unsettled rounds, unsettled round count) and the next round's quoted price for a given quorum. Escrow is derived server-side per (payer, gateway). A non-existent escrow is normal pre-first-round — it's created lazily. Call before payment: "x402" fetches to see whether the escrow is already funded, or to pre-fund it out of band.
| Name | Required | Description | Default |
|---|---|---|---|
| signaturesRequired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds valuable context: escrow is derived server-side per (payer, gateway), non-existent escrow is normal and lazily created, and the balance is labeled 'advisory'. This goes beyond the simple 'Read' verb and helps agents understand edge cases.
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 appropriately sized at three sentences. It front-loads the main purpose, then provides return data details, then gives usage guidance. Every sentence earns its place with 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?
Despite lacking an output schema, the description enumerates the returned fields (USDC ATA balance, committed amount, unsettled round count, quoted price) and covers the pre-first-round normal behavior for missing escrow. The only notable gap is the ambiguous parameter mapping, but for a single-parameter read tool, this is otherwise 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?
The schema has one optional parameter, signaturesRequired, but the description never mentions it explicitly. 'A given quorum' is a vague hint that likely maps to the parameter, but with 0% schema coverage, the description fails to compensate by clearly explaining how the parameter controls the quorum. This leaves room for ambiguity.
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 explicit verb 'Read' and names the resource ('x402 agent escrow') along with a specific secondary output ('next round's quoted price'). This clearly distinguishes it from sibling tools like molpha_get_latest or molpha_execute, which serve different purposes.
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 clear contextual guidance by stating 'Call before payment' and explaining the use case (checking if escrow is already funded or pre-funding out of band). However, it does not explicitly name alternatives or exclusion criteria, 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.
molpha_derive_feedDerive Molpha feedIdA
Locally derive the feedId for a declarative spec (apiConfig + quorum) — no transaction, no subscription required. feedId = keccak256(owner || apiConfigHash || signaturesRequired); the feed itself is created lazily on-chain at first settle (subscription or x402 round). Call this to preview a feedId before molpha_fetch_verified, or to check what feedId a given spec resolves to for the current signer. Prefer settled/finalized data — independent nodes must converge on a byte-identical value to co-sign.
| Name | Required | Description | Default |
|---|---|---|---|
| apiConfig | Yes | ||
| signaturesRequired | Yes | ||
| rejectNonDeterministic | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that computation is local, requires no transaction or subscription, that the feed is created lazily on-chain at first settle, and that independent nodes must converge on a byte-identical value, which implies a deterministic algorithm. This is a rich behavioral disclosure beyond simple read/write 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 compact and information-dense, covering purpose, formula, use cases, and determinism requirements in just a few sentences. Every sentence adds value and there is no 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?
The description provides strong context for the main computation and use, but it omits the return value format, which is critical since there is no output schema. It also does not cover edge cases like invalid specs or how rejectNonDeterministic affects behavior. Given the nested apiConfig complexity and absence of an output schema, the description is incomplete for full agent comprehension.
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 0%, so the description must explain the parameters. It explains apiConfig and signaturesRequired via the formula 'feedId = keccak256(owner || apiConfigHash || signaturesRequired)', but the third parameter, rejectNonDeterministic, is never mentioned. It also does not explain the structure or required fields within apiConfig, leaving the agent to infer from the bare schema. This incomplete compensation for a low-coverage schema warrants a low score.
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: 'Locally derive the feedId for a declarative spec (apiConfig + quorum)'. It uses a specific verb ('derive') and resource ('feedId'), and distinguishes itself from siblings by emphasizing local derivation and the fact no transaction/subscription is required, contrasting with molpha_fetch_verified.
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: 'Call this to preview a feedId before molpha_fetch_verified, or to check what feedId a given spec resolves to for the current signer.' It also advises preferring settled/finalized data, giving important context about when relying on this derived value is appropriate vs. using verified data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
molpha_describe_feedDescribe Molpha feedA
Read a feed's on-chain state (last committed value, registryVersion, signaturesRequired) and the caller's subscription status. Pass feedId directly, or apiConfig + signaturesRequired to derive it first (see molpha_derive_feed). A missing feed account is normal pre-first-settle — feeds are created lazily. feed.valueKind is the attested encoding of the stored bytes ("value" = raw payload, "hash" = keccak digest), NOT a scale hint: Molpha attests no decimals on-chain. When apiConfig is supplied, valueEncoding reports the off-chain valueTransform that produced the number, explicitly flagged as unattested.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | No | ||
| apiConfig | No | ||
| signaturesRequired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral transparency by clarifying that the feed account may not exist pre-settle and by distinguishing the attested valueKind from the unattested valueEncoding. It explicitly flags valueEncoding as unattested, which is critical for an agent to avoid over-trusting the output.
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 five sentences each deliver a distinct fact: purpose, input modes, missing-feed behavior, valueKind semantics, and valueEncoding semantics. No sentence is redundant or filler, achieving high information density without verbosity.
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 absence of an output schema, the description enumerates the key returned fields and subscription status, and explains edge-case behavior for uninitialized feeds. It even anticipates confusion around value encoding, making the tool self-contained for correct usage.
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?
Even though the schema only lists types, the description explains the semantic roles: feedId is a direct identifier, apiConfig + signaturesRequired are used for derivation. It also adds meaning to valueTransform by linking it to the reported valueEncoding field.
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 verb 'Read' immediately identifies this as an inspection tool for on-chain feed state, naming specific fields (last committed value, registryVersion, signaturesRequired). It also explicitly contrasts with the derivation tool by explaining the two ways to supply the feed identifier, distinguishing it from sibling 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 directly instructs when to pass feedId versus when to use apiConfig + signaturesRequired, and references molpha_derive_feed for the derivation step. It also prepares the agent for the expected 'missing feed' condition, clarifying the normal lazy-creation lifecycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
molpha_executeExecute Molpha data update on SolanaA
Submit a signed DataUpdate to the Solana feed via submit_data_update. Pass the output of molpha_fetch_verified through unmodified — both the artifact shape ({ dataUpdate, signature }) and the flat shape ({ s, commitmentAddr, timestamp }) are accepted, and short hex fields are zero-padded server-side. Permissionless on-chain; the owner key pays SOL fees. EVM/Starknet execution is deliberately out of scope (see molpha_verify) — use the verifier args from molpha_fetch_verified and call verify() yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | ||
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses meaningful behaviors: the operation is permissionless, the owner key pays SOL fees, short hex fields are zero-padded server-side, and EVM/Starknet execution is deliberately excluded. It does not mention dryRun behavior or potential failure modes, but the disclosed traits go beyond what the schema alone would imply.
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 front-loads the primary action. Every clause adds substantive context—shapes, server-side padding, permissionlessness, fee payer, and out-of-scope blockchains—without being bloated or repetitive.
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 covers the main workflow and scope exclusions well, and sibling context helps orient the agent. However, it leaves the dryRun parameter unexplained and does not describe the output or return behavior, especially since there is no output schema. It is adequate but has clear gaps.
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 0%, so the description must compensate. It does explain the accepted shapes for the result parameter and the zero-padding normalization, but it completely omits the dryRun parameter. With two parameters and one entirely unexplained, the description only partially covers the parameter semantics.
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: 'Submit a signed DataUpdate to the Solana feed via submit_data_update.' It also distinguishes itself from sibling tools by explicitly declaring EVM/Starknet execution out of scope and pointing to molpha_verify, so it is clear what this tool does and does not do.
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 use guidance: pass the output of molpha_fetch_verified through unmodified, both artifact and flat shapes are accepted, and EVM/Starknet users should use molpha_verify and call verify() themselves. This is a clear when-to-use and when-not-to-use with an alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
molpha_fetch_verifiedFetch verified Molpha dataA
Trigger a signing round for a feed and return the self-contained signed payload PLUS prebuilt verifier arguments for each requested chain. The signed payload is the trust anchor — verify it or forward it to a contract; do not consume value alone. Only the solana leg can be settled from this server (via autoSubmit, or by passing this tool's output to molpha_execute unmodified); evm and starknet return contract-ready calldata only — executing verify() there is the agent's job by design (see molpha_verify). payment selects how the round is paid for: "subscription" uses the caller's active USDC subscription (fails if inactive), "x402" self-funds a per-request escrow (auto-funds up to the MOLPHA_X402_MAX_PRICE_USDC / MOLPHA_X402_MAX_SPEND_PER_DAY_USDC caps), and "auto" (default) uses the subscription when active and falls back to x402 otherwise. feedId is derived from apiConfig + signaturesRequired + the signer's pubkey when omitted (see molpha_derive_feed).
| Name | Required | Description | Default |
|---|---|---|---|
| chains | Yes | ||
| dryRun | No | ||
| feedId | No | ||
| maxAge | No | ||
| payment | No | ||
| apiConfig | Yes | ||
| autoSubmit | No | Submit the signed DataUpdate to Solana in the same call, so a round-trip settle is one call instead of two. Requires "solana" in chains. Honours dryRun and the daily execute cap; a failed submit still returns the signed artifact so it can be retried via molpha_execute. | |
| encryptSecrets | No | ||
| signaturesRequired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and it delivers: it discloses the payment fallback behavior ("auto" uses subscription then falls back to x402), autoSubmit side effects (honours dryRun, daily cap, still returns artifact on failed submit), and warns not to consume `value` alone. This is rich behavioral context 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?
The description is long but every sentence earns its place, covering purpose, trust warning, per-chain behavior, payment options, and feedId derivation. It is front-loaded with the main function, then layers in constraints and alternatives without redundancy.
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 complex tool with no output schema, the description covers the core invocation context: return type (signed payload + verifier args), per-chain settlement paths, payment modes, and feedId fallback. It does not detail error cases or every parameter's effect, but it provides enough 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 low (11%), so the description must compensate. It does for key parameters: payment enum values are fully explained, feedId derivation is described, and autoSubmit's requirement ("Requires 'solana' in chains") is stated. However, several parameters like dryRun, maxAge, encryptSecrets, and signaturesRequired (beyond feedId mention) receive no semantic explanation.
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+resource: "Trigger a signing round for a feed and return the self-contained signed payload PLUS prebuilt verifier arguments for each requested chain." This clearly states what the tool does and distinguishes it from siblings like molpha_verify (execution) and molpha_get_latest (read-only data).
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 explains when to use this tool versus alternatives: it names molpha_execute and molpha_verify, clarifies that only the Solana leg can be settled from this server, and says evm/starknet return contract-ready calldata only. It also references molpha_derive_feed for feedId derivation, giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
molpha_get_capabilitiesGet Molpha capabilitiesA
Returns the current Molpha verification surface: active registryVersion, registered node set, gateway endpoints, supported chains, signing scheme, and x402 spend caps. Call first to learn where a signed result can be verified.
| Name | Required | Description | Default |
|---|---|---|---|
| includeAbi | No | Include the EVM verifier ABI in the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly indicates this is a read-only retrieval operation ('Returns') and lists the scope of the response. With no annotations provided, this adequately communicates the behavioral nature, though it does not disclose error conditions or whether authentication is required. For a simple getter, this is sufficient 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 two concise sentences. The first sentence inventories the return payload, and the second provides a clear action directive. No wasted words or repetition of the tool name.
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 param, no output schema), the description fully covers what the tool returns and why to call it. It positions the tool relative to the sibling verification/execution tools, making the context complete for an agent.
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% for the single optional parameter (includeAbi), and the schema description already explains its meaning. The tool description adds no extra parameter context, 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 a specific action ('Returns the current Molpha verification surface') and enumerates the exact contents (registryVersion, node set, endpoints, chains, signing scheme, x402 spend caps). It also distinguishes this capability-introspection tool from siblings by noting it should be called first to learn where to verify a signed result.
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 instruction 'Call first to learn where a signed result can be verified' provides clear context and ordering relative to verification workflows. While it does not explicitly name alternatives or when-not to use, the guidance is unambiguous for an agent deciding to start with capability discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
molpha_get_latestGet latest Molpha feedA
Read the latest on-chain feed account for a Molpha feedId. valueKind is the attested encoding of the stored bytes ("value" = raw payload, "hash" = keccak digest) — it is not a scale hint. Molpha does not attest decimals on-chain; see molpha_describe_feed's valueEncoding for the (unsigned) apiConfig provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds meaningful context by explaining that valueKind is the attested encoding of stored bytes and not a scale hint, and it warns that decimals are not attested on-chain. It could go further by describing the return payload shape or error behavior, but the caveats provided are valuable and non-obvious.
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 front-loaded with the core purpose. Each sentence adds unique value: the action, the valueKind clarification, and the pointer to describe_feed. 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?
Given one parameter and no output schema, the description covers the essential purpose and adds important interpretative context about valueKind and decimals. It is slightly incomplete because it does not enumerate the return fields beyond valueKind, but for a simple get-latest operation it is largely 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 0% and the description does not compensate: feedId is only restated as 'a Molpha feedId' with no explanation of how to obtain, format, or validate it. The valueKind discussion likely refers to output rather than the input parameter, so it does little to clarify the sole parameter.
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+resource: 'Read the latest on-chain feed account for a Molpha feedId.' This clearly distinguishes the tool from siblings like molpha_describe_feed or molpha_fetch_verified by identifying the exact read operation and target.
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 guidance is implied by the name and the main action (read latest feed), and the description points to molpha_describe_feed when decimal/encoding provenance is needed. However, it does not explicitly state when to prefer this over fetch_verified or verify, or list exclusions beyond the decimal caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
molpha_verifyVerify Molpha resultA
Build the verifier address and call args for a signed DataUpdate on EVM or Starknet. This tool stops at calldata by design, not by omission: the Molpha verifier is stateless, so the agent (or its contract) executes verify() itself and the server never submits an EVM/Starknet transaction or vouches for a result it did not verify on-chain. There is no EVM/Starknet execution path anywhere in this MCP server. For Solana, submit the DataUpdate via molpha_execute (or molpha_fetch_verified autoSubmit) and read it back with molpha_get_latest — there is no separate simulate-verify path. Accepts the dataUpdate/signature objects from molpha_fetch_verified verbatim; short hex fields are zero-padded to their canonical widths server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | ||
| signature | Yes | ||
| dataUpdate | Yes | ||
| includeAbi | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description fully carries the behavioral disclosure burden. It transparently explains that the tool stops at calldata by design, the verifier is stateless, the agent executes verify() itself, and the server never submits a transaction or vouches for off-chain results. It also notes that short hex fields are zero-padded server-side, adding detailed behavior.
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 longer than minimal examples, but every sentence earns its place by providing design rationale, alternatives, and input semantics. It is front-loaded with the core purpose and then expands into necessary context. Some slight redundancy exists between 'server never submits an EVM/Starknet transaction' and 'there is no EVM/Starknet execution path anywhere in this MCP server,' but overall it is well-structured and not wasteful.
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 complexity (4 params, nested objects, no annotations, no output schema), the description is remarkably complete. It explains what the tool does, how inputs are obtained, what it does not do, and how to handle alternative chains (Solana). This is sufficient 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?
Schema coverage is 0%, so the description must compensate. It adds critical meaning by stating that dataUpdate and signature come from molpha_fetch_verified verbatim and that short hex fields are zero-padded, clarifying input format expectations. However, the includeAbi parameter is not explained, leaving a minor gap for that parameter.
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 a specific verb and resource: 'Build the verifier address and call args for a signed DataUpdate on EVM or Starknet.' It distinguishes from siblings by explicitly noting that for Solana, molpha_execute or molpha_fetch_verified should be used instead, and that this tool only produces calldata without executing a transaction.
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 and when-not-to-use guidance. It states that for Solana, use molpha_execute or molpha_fetch_verified autoSubmit and read back with molpha_get_latest, and that there is no separate simulate-verify path. It also mentions accepting dataUpdate/signature from molpha_fetch_verified verbatim, implying a workflow order.
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.
8 tool updates
v0.1.2- First observed
molpha_agent_status - First observed
molpha_derive_feed - First observed
molpha_describe_feed - First observed
molpha_execute - First observed
molpha_fetch_verified - First observed
molpha_get_capabilities - First observed
molpha_get_latest - First observed
molpha_verify
TDQS
Scored across 8 tools
Most tools have clear distinct purposes (e.g., derive_feed vs fetch_verified, verify vs execute), but there is some overlap: describe_feed also provides the latest committed value and can derive feed IDs, making it partially redundant with get_latest and derive_feed. The detailed descriptions help differentiate, but an agent might still hesitate between get_latest and describe_feed for reading a value.
All tools share the 'molpha_' prefix and most follow a verb_noun pattern (get_latest, describe_feed, derive_feed, fetch_verified). However, 'molpha_verify' and 'molpha_execute' are bare verbs, and 'molpha_agent_status' is noun_noun, so the pattern is not fully consistent. Still, the naming is predictable and readable overall.
With 8 tools, the server is well-scoped. Each tool covers a distinct operation in the Molpha workflow: reading state, deriving IDs, checking capabilities, fetching verified data, building calldata, and submitting to Solana. There are no redundant or extraneous tools.
The core lifecycle is covered: derive feed ID, fetch verified data, verify on EVM/Starknet, execute on Solana, and read back the result. Minor gaps exist, such as no explicit subscription management (though subscription status is readable) and no historical data access, but these are acceptable for the server's apparent purpose.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
MCP server for Boson Protocol — on-chain agentic commerce for physical & digital goods.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP Server for AI agent identity and authorization. Create, verify, and manage agent identities with trust scores and scoped authorization tokens.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for coordinating a permissionless swarm of AI agents to discover, investigate, and synthesize on-chain anomalies across EVM chains. Agents authenticate via off-chain ECDSA and earn reputation through useful contributions.MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server enabling AI agents to browse, claim, submit, and manage paid tasks on the SYNAI Relay agent-to-agent task protocol, with on-chain USDC settlement via x402.MIT

AgentPump MCP serverofficial
AlicenseNot gradedqualityDmaintenanceMCP server for the AgentPump agent economy, enabling live market data reads and autonomous agent operations on Solana.38 npmMIT