AI agent이 서명된 오라클 데이터를 가져와 Solana에 게시하고, EVM 및 Starknet용 verifier calldata를 생성할 수 있도록 지원합니다.
다른 이름 molpha/mcp, mcp, @molpha/mcp
- 스타
- 2
- Tools
- 13
- 다운로드, 30일
- —
- 최신 버전
- 0.1.2
- 마지막 커밋
- 2026년 11월 12일
- 라이선스
- MIT
Molpha MCP란?
Molpha은(는) MCP server입니다. AI agent이 서명된 오라클 데이터를 가져와 Solana에 게시하고, EVM 및 Starknet용 verifier calldata를 생성할 수 있도록 지원합니다. 13개 도구를 제공합니다. 예: get_capabilities, derive_source_id, describe_feed.
프로젝트 README에서 생성된 요약
Molpha MCP server 정보
Molpha MCP는 AI agent가 블록체인 애플리케이션을 위한 임계값 서명 오라클 데이터와 상호작용할 수 있도록 지원합니다. agent는 HTTP API에서 서명된 페이로드를 가져와 Solana에 게시할 수 있으며, EVM 및 Starknet 네트워크를 위한 verifier calldata를 생성할 수도 있습니다. 이 server는 두 가지 주요 연결 방식을 지원합니다. 사용자가 자신의 지갑으로 트랜잭션에 서명하는 mcp.molpha.io 원격 게이트웨이 방식과 Node.js 24 이상을 사용하는 로컬 stdio 설치 방식입니다.
개발자는 로컬 keypairs, Privy 또는 Turnkey를 포함한 다양한 서명 백엔드를 선택할 수 있습니다. 로컬 설정에는 SOL 또는 USDC의 실수로 인한 지출을 방지하기 위한 dry-run 모드가 포함되어 있습니다. 사용자는 구독 라운드 또는 x402 라운드를 통한 요청당 결제 방식으로 비용을 관리할 수 있습니다. server는 할당량 기반 fetch를 위한 execute_subscription_round, 스마트 컨트랙트 인자 생성을 위한 build_verifier_calldata, Solana 블록체인에 데이터를 기록하기 위한 submit_attestation과 같은 특정 도구를 제공합니다.
활용 사례
- 1오라클 기능 조사agent가 현재 레지스트리 버전, 사용 가능한 노드, 지원되는 체인 및 verifier 주소를 요약할 수 있습니다.
- 2verifier 인자 생성개발자가 EVM 또는 Starknet verifier 호출에 필요한 calldata를 구축하는 데 server를 사용할 수 있습니다.
- 3서명된 데이터 라운드 실행AI가 구독 라운드를 실행하여 서명된 attestation과 그에 해당하는 verifier 인자를 가져올 수 있습니다.
- 4결제 상태 모니터링agent가 결제를 승인하기 전에 요청 가격과 남은 USDC 잔액을 확인할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
Molpha MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 Molpha MCP 설치
$ claude mcp add --env 'SIGNER_BACKEND=<SIGNER_BACKEND>' --env 'PRIVY_APP_ID=<YOUR_PRIVY_APP_ID>' --env 'PRIVY_APP_SECRET=<YOUR_PRIVY_APP_SECRET>' --env 'PRIVY_WALLET_ID=<YOUR_PRIVY_WALLET_ID>' --env 'TURNKEY_API_PRIVATE_KEY=<YOUR_TURNKEY_API_PRIVATE_KEY>' --env 'TURNKEY_API_PUBLIC_KEY=<YOUR_TURNKEY_API_PUBLIC_KEY>' --env 'TURNKEY_ORGANIZATION_ID=<YOUR_TURNKEY_ORGANIZATION_ID>' mcp -- npx -y @molpha/mcpCursor에 Molpha MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@molpha/mcp"
],
"env": {
"SIGNER_BACKEND": "<SIGNER_BACKEND>",
"PRIVY_APP_ID": "<YOUR_PRIVY_APP_ID>",
"PRIVY_APP_SECRET": "<YOUR_PRIVY_APP_SECRET>",
"PRIVY_WALLET_ID": "<YOUR_PRIVY_WALLET_ID>",
"TURNKEY_API_PRIVATE_KEY": "<YOUR_TURNKEY_API_PRIVATE_KEY>",
"TURNKEY_API_PUBLIC_KEY": "<YOUR_TURNKEY_API_PUBLIC_KEY>",
"TURNKEY_ORGANIZATION_ID": "<YOUR_TURNKEY_ORGANIZATION_ID>"
}
}
}
}VS Code에 Molpha MCP 설치
.vscode/mcp.json
{
"servers": {
"mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@molpha/mcp"
],
"env": {
"SIGNER_BACKEND": "<SIGNER_BACKEND>",
"PRIVY_APP_ID": "<YOUR_PRIVY_APP_ID>",
"PRIVY_APP_SECRET": "<YOUR_PRIVY_APP_SECRET>",
"PRIVY_WALLET_ID": "<YOUR_PRIVY_WALLET_ID>",
"TURNKEY_API_PRIVATE_KEY": "<YOUR_TURNKEY_API_PRIVATE_KEY>",
"TURNKEY_API_PUBLIC_KEY": "<YOUR_TURNKEY_API_PUBLIC_KEY>",
"TURNKEY_ORGANIZATION_ID": "<YOUR_TURNKEY_ORGANIZATION_ID>"
}
}
}
}VS Code CLI에 Molpha MCP 설치
$ code --add-mcp '{"name":"mcp","type":"stdio","command":"npx","args":["-y","@molpha/mcp"],"env":{"SIGNER_BACKEND":"<SIGNER_BACKEND>","PRIVY_APP_ID":"<YOUR_PRIVY_APP_ID>","PRIVY_APP_SECRET":"<YOUR_PRIVY_APP_SECRET>","PRIVY_WALLET_ID":"<YOUR_PRIVY_WALLET_ID>","TURNKEY_API_PRIVATE_KEY":"<YOUR_TURNKEY_API_PRIVATE_KEY>","TURNKEY_API_PUBLIC_KEY":"<YOUR_TURNKEY_API_PUBLIC_KEY>","TURNKEY_ORGANIZATION_ID":"<YOUR_TURNKEY_ORGANIZATION_ID>"}}'Claude Desktop에 Molpha MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@molpha/mcp"
],
"env": {
"SIGNER_BACKEND": "<SIGNER_BACKEND>",
"PRIVY_APP_ID": "<YOUR_PRIVY_APP_ID>",
"PRIVY_APP_SECRET": "<YOUR_PRIVY_APP_SECRET>",
"PRIVY_WALLET_ID": "<YOUR_PRIVY_WALLET_ID>",
"TURNKEY_API_PRIVATE_KEY": "<YOUR_TURNKEY_API_PRIVATE_KEY>",
"TURNKEY_API_PUBLIC_KEY": "<YOUR_TURNKEY_API_PUBLIC_KEY>",
"TURNKEY_ORGANIZATION_ID": "<YOUR_TURNKEY_ORGANIZATION_ID>"
}
}
}
}Codex에 Molpha MCP 설치
$ codex mcp add mcp --env 'SIGNER_BACKEND=<SIGNER_BACKEND>' --env 'PRIVY_APP_ID=<YOUR_PRIVY_APP_ID>' --env 'PRIVY_APP_SECRET=<YOUR_PRIVY_APP_SECRET>' --env 'PRIVY_WALLET_ID=<YOUR_PRIVY_WALLET_ID>' --env 'TURNKEY_API_PRIVATE_KEY=<YOUR_TURNKEY_API_PRIVATE_KEY>' --env 'TURNKEY_API_PUBLIC_KEY=<YOUR_TURNKEY_API_PUBLIC_KEY>' --env 'TURNKEY_ORGANIZATION_ID=<YOUR_TURNKEY_ORGANIZATION_ID>' -- npx -y @molpha/mcpCodex config.toml에 Molpha MCP 설치
~/.codex/config.toml
[mcp_servers.mcp] command = "npx" args = ["-y", "@molpha/mcp"] [mcp_servers.mcp.env] SIGNER_BACKEND = "<SIGNER_BACKEND>" PRIVY_APP_ID = "<YOUR_PRIVY_APP_ID>" PRIVY_APP_SECRET = "<YOUR_PRIVY_APP_SECRET>" PRIVY_WALLET_ID = "<YOUR_PRIVY_WALLET_ID>" TURNKEY_API_PRIVATE_KEY = "<YOUR_TURNKEY_API_PRIVATE_KEY>" TURNKEY_API_PUBLIC_KEY = "<YOUR_TURNKEY_API_PUBLIC_KEY>" TURNKEY_ORGANIZATION_ID = "<YOUR_TURNKEY_ORGANIZATION_ID>"
Gemini CLI에 Molpha MCP 설치
$ gemini mcp add -s user -e 'SIGNER_BACKEND=<SIGNER_BACKEND>' -e 'PRIVY_APP_ID=<YOUR_PRIVY_APP_ID>' -e 'PRIVY_APP_SECRET=<YOUR_PRIVY_APP_SECRET>' -e 'PRIVY_WALLET_ID=<YOUR_PRIVY_WALLET_ID>' -e 'TURNKEY_API_PRIVATE_KEY=<YOUR_TURNKEY_API_PRIVATE_KEY>' -e 'TURNKEY_API_PUBLIC_KEY=<YOUR_TURNKEY_API_PUBLIC_KEY>' -e 'TURNKEY_ORGANIZATION_ID=<YOUR_TURNKEY_ORGANIZATION_ID>' mcp npx -- -y @molpha/mcpGemini settings.json에 Molpha MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@molpha/mcp"
],
"env": {
"SIGNER_BACKEND": "<SIGNER_BACKEND>",
"PRIVY_APP_ID": "<YOUR_PRIVY_APP_ID>",
"PRIVY_APP_SECRET": "<YOUR_PRIVY_APP_SECRET>",
"PRIVY_WALLET_ID": "<YOUR_PRIVY_WALLET_ID>",
"TURNKEY_API_PRIVATE_KEY": "<YOUR_TURNKEY_API_PRIVATE_KEY>",
"TURNKEY_API_PUBLIC_KEY": "<YOUR_TURNKEY_API_PUBLIC_KEY>",
"TURNKEY_ORGANIZATION_ID": "<YOUR_TURNKEY_ORGANIZATION_ID>"
}
}
}
}Molpha MCP 도구 13
README에서 감지됨get_capabilitiesderive_source_iddescribe_feedget_latest_valuedescribe_accessget_x402_statuslist_providersget_providerquote_source_paymentexecute_subscription_roundexecute_x402_roundbuild_verifier_calldata
| get_capabilities | — | |
| derive_source_id | — | |
| describe_feed | — | |
| get_latest_value | — | |
| describe_access | — | |
| get_x402_status | — | |
| list_providers | — | |
| get_provider | — | |
| quote_source_payment | — | |
| execute_subscription_round | — | |
| execute_x402_round | — | |
| build_verifier_calldata | — |
도구 13개 모두 보기도구 수 줄이기
submit_attestation
| submit_attestation | — |
구성
SIGNER_BACKEND필수Signing backend: memory (local keypair) or keychain (Privy / Turnkey).
PRIVY_APP_ID비밀Privy app ID. Required for KEYCHAIN_BACKEND=privy.
PRIVY_APP_SECRET비밀Privy app secret. Required for KEYCHAIN_BACKEND=privy.
PRIVY_WALLET_ID비밀Privy wallet ID. Required for KEYCHAIN_BACKEND=privy.
TURNKEY_API_PRIVATE_KEY비밀Turnkey API private key. Required for KEYCHAIN_BACKEND=turnkey.
TURNKEY_API_PUBLIC_KEY비밀Turnkey API public key. Required for KEYCHAIN_BACKEND=turnkey.
TURNKEY_ORGANIZATION_ID비밀Turnkey organization ID. Required for KEYCHAIN_BACKEND=turnkey.
GATEWAY_ENDPOINTSComma-separated Molpha gateway URLs. Leave empty to use the SDK default.
KEYCHAIN_BACKENDKeychain provider: privy or turnkey. Required when SIGNER_BACKEND=keychain.
MOLPHA_DRY_RUNPreview all write and spend operations without submitting them.
MOLPHA_EVM_NETWORKSComma-separated EVM verifier networks.
MOLPHA_MAX_EXECUTES_PER_DAYProcess-local daily Solana submit cap.
MOLPHA_STARKNET_NETWORKSComma-separated Starknet verifier networks.
MOLPHA_X402_GATEWAY_PDAOptional settling gateway PDA (base58) to skip discovery when the escrow is already funded.
MOLPHA_X402_MAX_PRICE_USDCRefuse to fund an x402 round priced above this amount (decimal USDC).
MOLPHA_X402_MAX_SPEND_PER_DAY_USDCProcess-local daily x402 spend cap (decimal USDC).
OWNER_KEYPAIRPath to a Solana JSON keypair file. Required when SIGNER_BACKEND=memory.
PRIVY_WALLET_ADDRESSSolana address for the Privy wallet.
SOLANA_RPCSolana RPC endpoint.
TURNKEY_WALLET_ADDRESSSolana address for the Turnkey wallet.
| 이름 | 설명 | 유형 |
|---|---|---|
| SIGNER_BACKEND | Signing backend: memory (local keypair) or keychain (Privy / Turnkey). | 필수 |
| PRIVY_APP_ID | Privy app ID. Required for KEYCHAIN_BACKEND=privy. | 비밀 |
| PRIVY_APP_SECRET | Privy app secret. Required for KEYCHAIN_BACKEND=privy. | 비밀 |
| PRIVY_WALLET_ID | Privy wallet ID. Required for KEYCHAIN_BACKEND=privy. | 비밀 |
| TURNKEY_API_PRIVATE_KEY | Turnkey API private key. Required for KEYCHAIN_BACKEND=turnkey. | 비밀 |
| TURNKEY_API_PUBLIC_KEY | Turnkey API public key. Required for KEYCHAIN_BACKEND=turnkey. | 비밀 |
| TURNKEY_ORGANIZATION_ID | Turnkey organization ID. Required for KEYCHAIN_BACKEND=turnkey. | 비밀 |
| GATEWAY_ENDPOINTS | Comma-separated Molpha gateway URLs. Leave empty to use the SDK default. | |
| KEYCHAIN_BACKEND | Keychain provider: privy or turnkey. Required when SIGNER_BACKEND=keychain. | |
| MOLPHA_DRY_RUN | Preview all write and spend operations without submitting them. | |
| MOLPHA_EVM_NETWORKS | Comma-separated EVM verifier networks. | |
| MOLPHA_MAX_EXECUTES_PER_DAY | Process-local daily Solana submit cap. | |
| MOLPHA_STARKNET_NETWORKS | Comma-separated Starknet verifier networks. | |
| MOLPHA_X402_GATEWAY_PDA | Optional settling gateway PDA (base58) to skip discovery when the escrow is already funded. | |
| MOLPHA_X402_MAX_PRICE_USDC | Refuse to fund an x402 round priced above this amount (decimal USDC). | |
| MOLPHA_X402_MAX_SPEND_PER_DAY_USDC | Process-local daily x402 spend cap (decimal USDC). | |
| OWNER_KEYPAIR | Path to a Solana JSON keypair file. Required when SIGNER_BACKEND=memory. | |
| PRIVY_WALLET_ADDRESS | Solana address for the Privy wallet. | |
| SOLANA_RPC | Solana RPC endpoint. | |
| TURNKEY_WALLET_ADDRESS | Solana address for the Turnkey wallet. |
자동 검사
2026년 11월 12일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능통과
- 오픈 소스 라이선스 (OSI)통과
- 최근 1년 내 커밋 또는 릴리스통과
- 패키지 이름이 인기 패키지와 유사하지 않음통과
- 원격 엔드포인트가 HTTPS 사용검사되지 않음
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 모델에 대한 숨겨진 지침 없음통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음통과
README
GitHub에서 보기Molpha MCP
A Model Context Protocol (MCP) server that lets AI agents fetch signed Molpha oracle data, publish it on Solana, and build verifier calldata for EVM and Starknet.
Molpha turns HTTP API responses into threshold-signed payloads that can be verified on Solana, EVM, and Starknet. This server exposes that workflow as MCP tools, with signing behind a local, Privy, or Turnkey wallet, or, on mcp.molpha.io, behind your own wallet.
[!WARNING] This release targets Solana Devnet and Sepolia verifier networks. Treat it as testnet software, not a production security boundary. Write tools spend SOL, and round tools may consume subscription quota or pay USDC for x402 rounds, unless dry-run mode is enabled.
Quick start
Two recommended ways to connect:
| mcp.molpha.io | Local (stdio) | |
|---|---|---|
| Install | Nothing: add the URL to your client | npx, Node.js 24 or later |
| Signer | Your own wallet. The server holds no key. | Local keypair, Privy or Turnkey, held by the server |
| Subscription rounds | Sign in with SIWX, then execute_subscription_round |
execute_subscription_round |
| Spending limits | Your wallet's own policy | Dry-run lock and daily caps in the server |
| Best for | Getting started, agents that bring their own wallet | Unattended agents, private API sources |
mcp.molpha.io
Nothing to install, and no keys to hand over. Add the URL to your client.
Claude Code:
claude mcp add --transport http molpha https://mcp.molpha.io/mcp
Cursor (.cursor/mcp.json):
{ "mcpServers": { "molpha": { "url": "https://mcp.molpha.io/mcp" } } }
The read tools work straight away. The server has no wallet of its own, so name the one you mean: submitter for describe_feed and get_latest_value, payer for get_x402_status.
Anything that needs a signature is returned for your own wallet to sign, so each such operation is two or three tool calls around one signature:
| Operation | Tools, in order | The wallet signs |
|---|---|---|
| Subscription round | begin_session → complete_session → execute_subscription_round |
A text message, once per session |
| x402 round | prepare_x402_round → execute_x402_round |
A USDC transfer, not broadcast |
| Solana submit | prepare_submit_attestation → send_signed_transaction |
The submit transaction |
autoSubmit, dryRun and encryptSecrets are not offered here. Set spending limits in the wallet's own policy, and use the local server for private API work.
Sign in with your wallet (SIWX)
A subscription round on mcp.molpha.io is authorized by a sign-in session: the wallet signs one Sign-In-With-X text message (the x402 sign-in-with-x extension, in its Solana form), and the gateway issues a short-lived bearer token. The message is not a transaction and moves no funds.
| Step | Call | Result |
|---|---|---|
| 1 | describe_access({ address, owner? }) |
Whether the wallet is a subscription owner or delegate, and its limits |
| 2 | begin_session({ address, owner? }) |
The message to sign and an opaque challenge |
| 3 | The wallet signs message |
An Ed25519 signature over its exact UTF-8 bytes |
| 4 | complete_session({ challenge, signature }) |
A sessionToken and its expiresAt |
| 5 | execute_subscription_round({ sessionToken, apiConfig, signaturesRequired, chains }) |
The signed attestation and verifier arguments |
- Who can sign in. The subscription owner, or a delegate the owner added with
add_delegate. A delegate passes the owner's address asowner. - How to sign. The message as returned: raw UTF-8, no prefix, no envelope, no trailing newline. The signature may be base58, base64 or hex.
solana sign-offchain-messagewraps the text and is refused withinvalid_signature. - What the token is. A credential for one wallet and one gateway, valid 30 minutes by default and never past the subscription term. It only identifies the caller: the gateway re-reads the subscription and delegate from chain on every round, so
remove_delegateends access whatever tokens exist. It passes through this server and is never stored or logged. - What it needs. A gateway with
sessionAuth: trueinGET /v1/info. Otherwisebegin_sessionanswerssessions_unavailableand x402 rounds remain available.
The full walkthrough, with a signing example, delegate setup, gateway routes and error codes, is in docs/integration.md.
Local (stdio)
The server runs on your machine and holds the signer, so one tool call runs a round or submits to Solana, and MOLPHA_DRY_RUN keeps every write a preview until you turn it off.
Needs Node.js 24 or later. Nothing to clone or build.
1. Look around, no wallet. Read-only: capabilities, providers, sourceIds, prices, feed values.
claude mcp add molpha -- npx -y @molpha/mcp@0.2.0 --read-only
2. Build with a testnet wallet. Put your signer settings in a .env file (see Setup), then check them. The doctor prints a ready-to-paste config for your client, with secrets left as placeholders:
npx -y @molpha/mcp@0.2.0 doctor
A config like this keeps every write a preview (MOLPHA_DRY_RUN=true):
claude mcp add molpha -e SIGNER_BACKEND=keychain -e KEYCHAIN_BACKEND=privy -e PRIVY_APP_ID='<privy-app-id>' -e PRIVY_APP_SECRET='<privy-app-secret>' -e PRIVY_WALLET_ID='<privy-wallet-id>' -e PRIVY_WALLET_ADDRESS='<base58-solana-address>' -e MOLPHA_DRY_RUN=true -- npx -y @molpha/mcp@0.2.0
3. Spend only when you mean to: fund the wallet, then set MOLPHA_DRY_RUN=false in the server's config. The full guide, with Cursor, VS Code, Codex and Claude Desktop, is docs/integration.md.
With no signer configured the server starts read-only and offers only the read tools (runLevel: "read-only" in get_capabilities). --read-only or SIGNER_BACKEND=none forces it.
Tools
| Tool | Access | Description |
|---|---|---|
get_capabilities |
Read | Run level, program id, registry version, nodes, gateways, chains, verifier addresses, x402 caps and source-payment policy. |
derive_source_id |
Read, local | Derive an apiConfig's sourceId (how). No transaction, no wallet. |
describe_feed |
Read | Read the Solana feed for (sourceId, signaturesRequired, submitter) and the signer's subscription status. |
get_latest_value |
Read | Read the latest attested value stored in a Solana feed account. |
describe_access |
Read | Whether a wallet is a subscription owner or delegate, with the plan's and the delegate's limits. |
get_x402_status |
Read | Quote the next x402 round, show where payment goes, and read a payer's USDC balance and remaining daily budget. |
list_providers |
Read | The data providers the gateway integrates and the flows it serves (providers). |
get_provider |
Read | One provider's flows, disclosure and ready-made feeds, each with a complete apiConfig and sourceId. |
quote_source_payment |
Read | Price a paywalled source with one unpaid request, including the worst-case total. |
execute_subscription_round |
Spends quota | Run a round paid from a USDC subscription; return the signed attestation plus verifier arguments. autoSubmit: true settles Solana in the same call. |
execute_x402_round |
Spends USDC | Run a round paid per request over x402; same output. |
build_verifier_calldata |
Read, local | Build EVM/Starknet verifier address and verify() call arguments. Calldata only: it verifies nothing. |
submit_attestation |
Write | Submit a signed attestation to Solana. Accepts a round tool's output unmodified. |
On mcp.molpha.io the one-call round and submit tools become prepare/sign/execute pairs (above). Every tool returns structuredContent and carries MCP annotations; see Structured output and annotations. For tolerance-mode aggregation and the full configuration table, see docs/reference.md.
Round timing. Rounds run on a fixed 100 ms tick. Requests for one feed (the same source and quorum) inside one tick share a round, so a feed runs at most 10 rounds per second, and one wallet gets at most one round per tick for a feed: a second request in the same tick is answered with HTTP 409, which the round tools retry a tick later before failing with round_conflict. See Round timing.
Setup
For the local server.
Signer. Put your settings in a .env file and check them with the doctor. It prints a ready-to-paste config for your client with secrets left as placeholders. Use a dedicated testnet wallet.
SIGNER_BACKEND=memory
OWNER_KEYPAIR=/absolute/path/to/owner-keypair.json
SOLANA_RPC=https://api.devnet.solana.com
MOLPHA_DRY_RUN=true
Privy and Turnkey settings are in docs/reference.md and .env.example.
npx -y @molpha/mcp@0.2.0 doctor
Dry-run lock. MOLPHA_DRY_RUN=true locks execute_subscription_round, execute_x402_round and submit_attestation to previews. A call with dryRun: false is refused with dry_run_locked, so going live is a change to the server's config, never to one tool call.
Subscription. Subscribing debits USDC, so it is kept out of the MCP tools and runs as a CLI command with the same signer configuration. --max-price-usdc is a cap in USDC base units (6 decimals); drop --dry-run to subscribe, or use extend to extend one.
npx -y @molpha/mcp@0.2.0 provision subscribe --plan Basic --max-price-usdc 20000000 --dry-run
Client. Every client launches the local server with npx. Snippets for Claude Code, Cursor, VS Code, Codex and Claude Desktop are in docs/integration.md, ready-to-edit copies are in examples, and Claude Desktop users can install the molpha-mcp.mcpb bundle attached to each release.
Example prompts
Discover. Use Molpha to inspect the current oracle capabilities. Summarize the registry version, node count, chains, gateways, and verifier addresses. Make no writes.
Derive. Derive a Molpha sourceId for
https://api.example.com/v1/finalized/priceusing the JSON path$.price. Show me the canonical JSON and the sourceId. Do not send a transaction.
Fetch. For that source, run a subscription round with 3 signatures for the EVM chain. Summarize the value, timestamp, registry version and verifier call. Treat the signed attestation as the trust anchor, not the value alone.
Provider. List the integrated data providers, describe TickerLayer's
btcusdfeed, and run it with 3 signatures for Solana, passing theapiConfigexactly as given.
Check spend. Call
get_x402_statusfor 3 signatures. Tell me the price, where payment goes, and my USDC balance before I authorize anexecute_x402_round.
Publish. If I give you a newer signed attestation, preview
submit_attestationwithdryRun: true, explain the exact write, and wait for my confirmation before submitting.
Use a public endpoint that returns stable, independently reproducible data: live ticker endpoints may differ across oracle nodes and fail to reach quorum.
How it works
flowchart LR
Client["MCP client"] <-->|"stdio / HTTP"| Server["Molpha MCP server"]
Server --> Guardrails["Dry-run · daily caps · spend caps"]
Server --> Signer["Signer adapter<br/>local · Privy · Turnkey"]
Server --> SDK["Molpha SDK / x402 client"]
SDK --> Gateway["Molpha gateway"]
Gateway <--> Nodes["Oracle node quorum"]
SDK <--> Solana["Solana program<br/>feeds · subscriptions"]
Gateway --> Artifact["Threshold-signed attestation"]
Artifact --> Server
Server --> Args["EVM / Starknet verifier args,<br/>or submit_attestation on Solana"]
The server is an adapter and policy boundary, not a new source of truth. Oracle nodes independently fetch the committed API configuration and produce one aggregate signature after reaching quorum; the server returns that self-contained signed artifact. Consumers trust a value only after verifying the signed payload against its registry version.
Development
git clone https://github.com/molpha/mcp.git
cd mcp
npm ci
cp .env.example .env
npm run build
Point a client at the built server with node /absolute/path/to/mcp/dist/src/server.js.
npm run dev # start from TypeScript
npm run typecheck && npm test && npm run build # run before opening a pull request
npm run gen:install # rewrite the generated install snippets in the docs and examples
npm run smoke:pack # pack the tarball and run it with npx over stdio (needs network)
npm run pack:mcpb # build the Claude Desktop bundle from an allowlist
@molpha/sdk is pinned to an exact version and resolved from the npm registry; to try a local checkout run npm install ../sdk and do not commit the result. Install snippets are generated from src/install-config.ts: edit the renderers, not the generated text, because npm test fails when a generated file is out of date.
Versioning and publishing use Changesets: if a pull request changes published behavior, run npx changeset. On merge to main, release.yml opens a "Version Packages" PR and, when that merges, publishes @molpha/mcp to npm (trusted publishing, no token) and server.json to the MCP registry.
Bug reports and focused pull requests are welcome. For security issues, use GitHub's private vulnerability reporting instead of a public issue.
Documentation
- Integration guide: install per client, spending, signing in with your own wallet (SIWX), and running the HTTP server yourself
- Reference: sourceId, tolerance mode, x402, providers, configuration, signers
- Molpha protocol documentation
- Client configuration examples and the MCPB manifest
License
Released under the MIT License.
Molpha MCP 질문
Molpha MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add --env 'SIGNER_BACKEND=<SIGNER_BACKEND>' --env 'PRIVY_APP_ID=<YOUR_PRIVY_APP_ID>' --env 'PRIVY_APP_SECRET=<YOUR_PRIVY_APP_SECRET>' --env 'PRIVY_WALLET_ID=<YOUR_PRIVY_WALLET_ID>' --env 'TURNKEY_API_PRIVATE_KEY=<YOUR_TURNKEY_API_PRIVATE_KEY>' --env 'TURNKEY_API_PUBLIC_KEY=<YOUR_TURNKEY_API_PUBLIC_KEY>' --env 'TURNKEY_ORGANIZATION_ID=<YOUR_TURNKEY_ORGANIZATION_ID>' mcp -- npx -y @molpha/mcp를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
Molpha MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
Molpha MCP는 어떤 도구를 제공하나요?
13개 도구를 제공합니다. 예: get_capabilities, derive_source_id, describe_feed, get_latest_value, describe_access.
Molpha는 HTTP API 응답을 어떻게 처리하나요?
Molpha는 HTTP API 응답을 Solana, EVM, Starknet에서 검증 가능한 임계값 서명(threshold-signed) 페이로드로 변환합니다.
Molpha MCP server를 즉시 프로덕션 환경에서 사용해도 안전한가요?
아니요, 현재 릴리스는 Solana Devnet 및 Sepolia verifier 네트워크를 대상으로 하므로, 프로덕션 보안 경계가 아닌 테스트넷 소프트웨어로 취급해야 합니다.
로컬 서버 사용 시 실수로 비용이 발생하는 것을 어떻게 방지할 수 있나요?
MOLPHA_DRY_RUN 환경 변수를 사용하면 명시적으로 비활성화하기 전까지 모든 쓰기 작업을 미리보기 상태로 유지할 수 있습니다.