Skip to main content
Glama
quai-mcp-server

quai-mcp-server

by Intellihackz

quai-mcp-server

Quai Network 체인 데이터와 읽기 전용 상호작용 도구를 Claude Desktop, Claude Code 같은 AI 클라이언트에 노출하는 MCP(Model Context Protocol) 서버입니다. 공식 @modelcontextprotocol/sdk와 Quai의 ethers 계열 SDK인 quais로 구축되었습니다.

Quai Network를 쉽게 설명하면

Quai는 작업 증명(proof-of-work) 기반의 EVM 호환 레이어 1 블록체인으로, **샤딩(sharding)**을 통해 확장합니다. 하나의 체인이 모든 작업을 처리하는 대신, 계층 구조로 배열된 여러 체인으로 분할됩니다.

                Prime chain (1)
               /      |       \
        Region      Region      Region      <- "Cyprus", "Paxos", "Hydra"
       /  |  \      /  |  \     /  |  \
     Zone Zone Zone  ...              9 Zone chains total
  • Prime은 유일한 최상위 체인입니다. 모든 채굴자가 Prime을 채굴하며, 네트워크 전체의 상태를 정산하지만 사용자 트랜잭션을 직접 처리하지는 않습니다.

  • Region 체인(현재 Cyprus, Paxos, Hydra)은 Prime 아래에 있으며, 자신의 Zone들을 집계합니다.

  • Zone 체인(Cyprus1/2/3, Paxos1/2/3, Hydra1/2/3 — 현재 9개, 네트워크가 성장함에 따라 더 추가 가능)은 실제 EVM이 존재하는 곳입니다. 사용자 트랜잭션, 컨트랙트, 잔액 등 모든 것이 여기에 있습니다.

데이터와 함께 보안도 분할하는 다른 샤딩 설계와 달리, Quai는 전체 계층 구조에 걸쳐 보안을 통합하고 데이터/처리량만 분할합니다. Prime과 Region 체인은 하위 Zone들과 병합 채굴(merge-mine)됩니다.

도구 개발에 가장 중요한 부분: 모든 Quai 주소는 위치를 인식합니다. 주소 자체의 바이트가 해당 주소가 속한 단일 Zone(그리고 QUAI 원장(account 기반, Ethereum과 유사)인지 Qi 원장(UTXO 기반, Bitcoin과 유사)인지)을 인코딩합니다. Cyprus1의 주소는 Cyprus1에만 존재합니다. Paxos2에 그 주소에 대해 물어볼 수 없습니다. 그래서 아래 여러 도구는 사용자를 대신해 Zone을 자동으로 해석하거나, 명시적으로 Zone을 지정하도록 요청합니다.

Related MCP server: QuickContract MCP

도구

읽기 전용

도구

기능

get_balance

주소의 QUAI 잔액. Zone은 주소에서 자동으로 해석됩니다.

get_block

번호/해시/태그로 블록 세부 정보. 블록 번호는 체인 간에 전역적으로 고유하지 않으므로 샤드/Zone이 필요합니다.

get_transaction

해시로 트랜잭션 및 영수증, 트랜잭션이 도착한 Zone 포함.

resolve_zone

주소가 주어지면 해당 주소의 Zone, Region, 원장(Quai vs Qi)을 보고합니다. 네트워크 호출 없음.

call_contract

읽기 전용 eth_call 스타일 컨트랙트 호출(주소 + ABI 조각 + 메서드 + 인자). Zone은 컨트랙트 주소에서 해석됩니다.

search_docs

선별된 소규모 오프라인 Quai 문서 인덱스를 검색하고 스니펫과 링크를 반환합니다.

get_conversion_rate

QUAI와 Qi(Quai의 자체 두 네이티브 원장) 간의 전환 견적을 제공합니다. 이는 Quai의 내장 "스왑"이며, 제3자 DEX가 아닙니다(Quai에서 확인된 DEX는 알려진 바 없음).

이 중 어떤 것도 자금을 이동하거나, 서명하거나, 온체인 상태를 변경할 수 없습니다.

지갑(수탁형: 암호화, 이름 지정, 비밀번호 보호)

도구

기능

create_wallet

선택한 Zone(기본값 cyprus1)에 착지하도록 조정된 새 QUAI 원장 개인 키 + 주소를 생성하고, 이름과 비밀번호 아래에 암호화하여 저장합니다. 기본적으로(pairQiWallet: true) 동일한 이름/비밀번호/Zone으로 일치하는 Qi 지갑도 생성하므로 QUAI→Qi 전환이 항상 실제로 착지할 곳을 갖게 됩니다. QUAI 전용 지갑을 원하면 pairQiWallet: false로 설정하세요.

import_wallet

이미 보유한 QUAI 원장 개인 키에 대해 동일한 암호화 저장소를 사용합니다.

create_qi_wallet

새 Qi 원장(UTXO 기반) 지갑을 생성합니다. Qi는 단일 키페어가 아닌 주소 파생과 UTXO 스캔이 필요하므로 니모닉이 있는 HD 지갑입니다. 동일한 방식으로 암호화됩니다.

import_qi_wallet

이미 보유한 Qi 니모닉 문구에 대해 동일한 암호화 저장소를 사용합니다.

list_wallets

두 종류의 저장된 지갑을 나열합니다(이름, 원장, 주소, Zone). 비밀번호는 필요 없습니다. 지출이나 Qi 잔액 확인에만 필요합니다.

send_transaction

저장된 QUAI 지갑에서 QUAI를 서명하고 전송합니다. 2단계 확인(아래 참조). 발신자/수신자가 다른 Zone에 있을 수 있습니다. 이는 외부 트랜잭션(ETX)이며 네트워크가 자동으로 처리합니다. 수신자가 Qi 주소인 경우 이는 QUAI→Qi 전환 경로(아래 참조)를 겸합니다.

get_qi_balance

Qi 지갑의 총 잔액과 사용 가능한 잔액. 비밀번호가 필요합니다. 아래 "Qi에 비밀번호가 필요한 이유"를 참조하세요.

convert_qi_to_quai

Qi 지갑에 보유한 Qi를 QUAI로 전환하여 QUAI 주소로 보냅니다. 2단계 확인, send_transaction과 동일한 패턴.

get_qi_payment_code

Qi 지갑의 재사용 가능한 BIP-47 결제 코드를 가져옵니다. 다른 사람이 당신에게 send_qi를 보낼 수 있도록 제공하는 코드입니다. 비밀번호 필요(순수 로컬, 네트워크 호출 없음).

send_qi

Qi 지갑에서 수신자의 결제 코드(일반 주소가 아님)로 Qi를 보냅니다. 아래 "Qi → Qi 전송" 참조. 2단계 확인, 다른 쓰기 도구와 동일한 패턴.

이 서버는 지갑을 생성하거나 가져오면 사용자를 대신해 키를 보관합니다. 좁은 의미의 로컬 수탁이며, geth 키스토어나 MetaMask의 로컬 볼트와 같은 방식입니다. 다른 사람의 자금을 위한 호스팅 서비스로 운영되지는 않습니다. 모든 것은 서버가 실행되는 머신의 디렉토리에 있으며, 사용자만 아는 비밀번호로 암호화됩니다.

암호화 작동 방식: 각 지갑은 표준 Web3 Secret Storage (V3 keystore) 형식의 개인 키입니다. geth와 MetaMask가 사용하는 것과 동일한 형식이며, quais의 encryptKeystoreJson을 통해 생성됩니다. 구체적으로: 비밀번호는 scrypt(N=2^17, r=8, p=1, 표준 "비용이 많이 드는" 비용 매개변수 — 의도적으로 각 비밀번호 추측을 느리게 만듦)로 스트레칭되고, 개인 키는 AES-128-CTR로 암호화되며, 암호문에 대한 MAC이 잘못된 비밀번호(또는 변조된 파일)를 키 자료가 파생되기 전에 감지합니다. 이는 잘 검토되고 널리 배포된 방식입니다. 여기에는 맞춤형 암호화가 없습니다.

지갑 위치: 기본적으로 ~/.quai-mcp-server/wallets/(QUAI_WALLET_DIR로 재정의 가능) — QUAI 지갑은 <name>.json, Qi 지갑은 <name>.qi.json으로 저장됩니다. 디렉토리는 0700, 각 키스토어 파일은 0600(소유자 읽기/쓰기 전용, POSIX가 아닌 플랫폼에서는 최선의 노력)으로 생성됩니다. 생성 후 명시적으로 강제 적용되며, 프로세스 umask에만 맡기지 않습니다. 주소는 두 경우 모두 평문으로 저장됩니다(공개 정보이므로 list_wallets와 QUAI 측 미리보기가 비밀번호 없이 작동합니다). 그러나 개인 키(또는 Qi의 경우 니모닉)는 어떤 도구에서도 평문으로 기록, 로깅, 반환되지 않습니다.

이름 지정: 이름은 최대 하나의 QUAI 지갑 그리고 최대 하나의 Qi 지갑을 식별합니다. 이들은 독립적인 키스토어(다른 파일, 다른 비밀, 완전히 무관한 키 자료)이며 우연히 같은 라벨을 공유합니다. 같은 이름으로 두 개의 QUAI 지갑(또는 두 개의 Qi 지갑)을 만들 수는 없지만, QUAI 지갑의 이름을 Qi 지갑에 재사용하는 것은 정확히 create_wallet의 페어링이 작동하는 방식이며, create_qi_wallet/import_qi_wallet도 같은 이유로 의도적으로 허용합니다.

Qi 지갑은 내부적으로 HD 지갑이지만, 이 서버는 니모닉만 저장합니다 — 파생된 주소 트리나 UTXO/스캔 상태는 절대 저장하지 않습니다. create_qi_wallet/import_qi_wallet은 QUAI 측과 동일한 encryptKeystoreJson 호출을 통해 {address, privateKey, mnemonic}을 암호화합니다(여기서 address/privateKey 필드는 지갑의 첫 번째 파생 주소일 뿐이며, 파일이 정상적이고 유효한 V3 키스토어가 되도록 존재합니다). 의미 있는 비밀은 니모닉입니다. 이후의 모든 작업(get_qi_balance, convert_qi_to_quai)은 해당 니모닉에서 새 QiHDWallet을 재구성하고 요청 시 동일한 수신 주소를 다시 파생합니다. 고정된 계정/Zone에 대한 HD 파생은 항상 동일한 주소를 생성하므로 결정적입니다. 이는 직접 검증되었습니다. 지갑의 니모닉을 내보내고 다른 이름으로 다시 가져왔을 때 동일한 주소가 재현되었습니다. 트레이드오프는 모든 Qi 작업이 캐시를 읽는 대신 처음부터 다시 파생한다는 점인데, 이는 추론하기 더 간단하고 니모닉이 실제로 의미하는 바에서 벗어날 수 없지만, QUAI 측보다 비밀번호가 더 자주 필요하다는 비용이 있습니다(아래 참조).

Qi가 비밀번호를 더 자주 요구하는 이유: QUAI의 get_balance는 공개 계정 잔액을 체인에서 직접 읽습니다 — 비밀이 필요 없습니다. Qi에는 그런 것이 없습니다: "잔액"은 지갑의 니모닉으로만 파생할 수 있는 주소에 속한 미사용 거래 출력(UTXO)의 합계이므로, 잔액을 계산하려면 먼저 지갑을 재구성해야 합니다. 그래서 get_qi_balance는 비밀번호를 받지만(QUAI의 get_balance는 받지 않음), convert_qi_to_quai의 미리보기 단계는 환율을 인용할 수 있지만 실제로 Qi를 충분히 보유하고 있는지 확인할 수는 없습니다 — 그 확인은 비밀번호가 확인 단계에 도달한 후에만 이루어집니다.

비밀번호 규칙: 최소 8자, 암호화 전에 검사됩니다. 잘못된 비밀번호 시도에 대한 별도의 속도 제한은 없습니다 — scrypt의 비용 매개변수가 이미 각 추측을 계산적으로 비싸게 만들며, 이것이 이러한 종류의 로컬 키스토어에 대한 표준 방어입니다.

send_transaction, convert_qi_to_quai, send_qi의 확인 흐름: 세 가지 모두 항상 두 번의 호출이 필요하며, 두 번째 호출에서만 비밀번호가 필요합니다.

  1. 목적지와 금액으로 호출합니다(send_transaction의 경우 walletName/to/amount; send_qi의 경우 walletName/recipientPaymentCode/amount/destinationZone; convert_qi_to_quai의 경우 to 형태의 버전) — 아직 비밀번호는 필요 없습니다. 아무것도 브로드캐스트되지 않습니다. 미리보기를 받습니다 — 해결된 영역, 존재하는 경우 추정치(전송의 경우 가스, 변환의 경우 변환된 금액; send_qi는 1:1 전송이므로 추정치 없음), 그리고 2분 동안 유효한 confirmationToken.

  2. 동일한 매개변수에 confirm: true, 해당 confirmationToken, 그리고 지갑의 password를 추가하여 다시 호출합니다. 그때서야 키/니모닉이 복호화되고 트랜잭션이 실제로 서명되어 전송됩니다.

토큰은 일회용이며 미리보기된 정확한 매개변수에 묶여 있습니다 — 어떤 것이든 변경되거나, 토큰이 만료되었거나, 이미 사용된 경우 2단계는 명확한 오류와 함께 실패하고 다시 미리보기해야 합니다. 이는 MCP 클라이언트 자체에 도구 승인 UI가 있는지 여부와 관계없이 동일하게 작동하므로, 클라이언트가 제공하는 것에 의존하는 대신 실제 게이트 역할을 합니다. 잘못된 비밀번호는 토큰/매개변수가 유효했는지 여부를 누출하지 않고 깔끔하게 실패합니다(Incorrect password for wallet "...").

의도적으로 export_wallet/"개인 키 또는 니모닉 표시" 도구는 없습니다 — 비밀이 저장소에 들어가면 이 서버를 통해 나가는 유일한 방법은 그것으로 서명하는 것입니다.

QUAI ↔ Qi 변환("스왑"): Quai에는 두 원장(QUAI(계정 기반)와 Qi(Bitcoin과 같은 UTXO 기반)) 사이의 네이티브 프로토콜 수준 변환이 있으며, 제3자 DEX가 아닌 온체인 환율이 있습니다. get_conversion_rate는 지갑 없이 양방향으로 견적을 제공합니다. 두 실행 방향 모두 이제 구현되었습니다:

  • QUAI → Qi: Qi 원장 주소(예: create_qi_wallet에서 생성된 주소)로의 일반적인 send_transaction일 뿐입니다. 도구가 이를 자동으로 감지하고(미리보기에서 isConversion: true) 일반적인 가스/잔액 정보와 함께 예상 수령 Qi를 표시합니다.

  • Qi → QUAI: convert_qi_to_quai, 내부적으로 quais의 QiHDWallet.convertToQuai를 사용하며, send_transaction과 동일한 미리보기/확인/비밀번호 패턴을 따릅니다.

Qi → Qi 전송: Qi 지갑은 서로의 주소로 직접 전송하지 않습니다. 대신 각 Qi 지갑에는 재사용 가능한 BIP-47 결제 코드(get_qi_payment_code)가 있습니다 — 주소를 공유하는 것처럼 공유하되, 매 결제마다 새로운 일회용 주소가 파생되어 프라이버시를 보호합니다. 전송하려면 송신자가 수신자의 결제 코드로 "채널을 엽니다"(send_qi가 자동으로 수행) — 이는 두 결제 코드 간의 순수한 로컬 ECDH로, 결정적이고 재현 가능하며 온체인 작업이나 영구 상태가 필요 없습니다. 문제는 수신 측에 있습니다: 쌍으로 파생된 주소는 지갑의 일반적인 결정적 주소 시퀀스의 일부가 아니므로, 알려주지 않는 한 그렇게 전송된 자금을 찾을 수 없습니다. 구체적으로: 누군가 결제 코드를 통해 Qi 지갑에 결제한 후, 그들의 결제 코드를 get_qi_balance의 counterpartyPaymentCodes에 전달하세요 — 동일한 채널을 열고 잔액에 포함시킵니다. 결제 코드 결제가 도착했음을 수신자에게 알리는 알림 메커니즘(온체인 또는 기타)은 없습니다; 양측은 대역 외에서 이미 서로를 알고 있어야 하며, 잔액을 확인하기 전에 주소를 알아야 하는 것과 같습니다. send_qi는 또한 교차 영역 전송(송신자 자신의 영역과 별개의 destinationZone)을 지원하며, send_transaction의 ETX 및 QiHDWallet 자체 영역 모델과 동일한 방식입니다.

한 가지 알려진 미세한 문제: send_qi의 미리보기 단계는 결제 코드의 형식을 사전에 검증하지 않습니다(검사할 수 있는 내보낸 검증기가 없음), 따라서 잘못된 형식의 코드는 미리보기가 정상적으로 표시되고 확인 시에만 실패합니다 — 안전하게(아무것도 전송되지 않고 자금이 위험에 처하지 않음), 다만 이상적인 것보다 늦게 실패합니다.

아직 구현되지 않음: deploy_contract, request_faucet.

여기서 테스트된 것에 대한 솔직한 설명, 업데이트됨: 전체 send_qi / 결제 코드 루프가 두 개의 실제 지갑으로 메인넷에서 라이브로 검증되었습니다 — 실제로 올바른 형식의 BIP-47 결제 코드(PM8T...)가 생성되어 호출 간 결정적임이 확인되었고, 미리보기가 교차 영역과 동일 영역을 올바르게 감지했으며, 빈 지갑에 대한 확인이 충돌 대신 실제 SDK 오류(No Qi available in zone)로 실패했고, get_qi_balance가 유효하지 않은 상대방 결제 코드를 전체 호출을 실패시키지 않고 rejectedPaymentCodes로 올바르게 격리했습니다. 여전히 검증되지 않은 것은 이 문서의 다른 모든 곳과 같은 이유로: 자금이 있는 두 지갑 간의 실제 결제 코드 전송 완료 — 실제 Qi가 필요하고 요청 없이는 수행되지 않았기 때문입니다.

여기서 테스트된 것에 대한 솔직한 설명: 위의 모든 것이 라이브 메인넷에서 실행되었으며, 결정성 검사(Qi 지갑의 니모닉을 내보내고 다른 이름으로 다시 가져와 동일한 주소가 재현되는지)와 실제 오류 경로(잘못된 비밀번호, 불충분한 QUAI 가스, 빈 Qi 지갑에서 변환을 시도할 때의 실제 QiHDWallet 오류 -- No Qi available in zone)를 포함합니다. 실제로 실행되지 않은 것은 실제 자금을 보유한 지갑에 대해 convert_qi_to_quai 또는 QUAI→Qi 변환이 실제로 완료되는 것입니다 — 실제 돈을 사용해야 하고 요청 없이는 수행되지 않았기 때문입니다.

설치

npm install
npm run build

또는 게시된 후 설치 없이 직접 실행:

npx quai-mcp-server

요구 사항

  • Node.js 18+

구성(환경 변수)

모두 선택 사항 — 합리적인 기본값은 Quai 메인넷을 가리킵니다.

변수

기본값

용도

QUAI_MAINNET_RPC_URL

https://rpc.quai.network

network: "mainnet"(기본값)일 때 도구가 사용하는 메인넷 RPC 게이트웨이.

QUAI_TESTNET_RPC_URL

https://orchard.rpc.quai.network

network: "testnet"일 때 사용되는 Orchard 테스트넷 RPC 게이트웨이.

QUAI_WALLET_DIR

~/.quai-mcp-server/wallets

암호화된 지갑 키스토어 파일이 저장되는 위치.

모든 도구는 또한 호출별로 network 인수("mainnet" 또는 "testnet")를 허용하므로 클라이언트는 서버를 재시작하지 않고도 두 네트워크를 모두 쿼리할 수 있습니다.

키에 관하여: 위의 "지갑" 섹션을 참조하세요. 키는 키가 필요한 create_wallet/import_wallet/send_transaction 호출 기간 동안에만 메모리에 평문으로 존재합니다 — 디스크에 저장되지 않으며, 로깅되지 않습니다. QUAI_WALLET_DIR(및 이 서버를 실행하는 모든 머신)을 다른 로컬 비밀 저장소처럼 취급하세요: 해당 디렉토리에 대한 파일 시스템 접근 권한과 약한 비밀번호를 무차별 대입할 수 있는 충분한 컴퓨팅 능력이 있는 사람은 로컬 geth 키스토어나 MetaMask 볼트와 마찬가지로 결국 지갑을 복호화할 수 있습니다.

Claude Desktop에 등록

Claude Desktop MCP 구성(claude_desktop_config.json — macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)에 다음을 추가하세요:

{
  "mcpServers": {
    "quai": {
      "command": "npx",
      "args": ["quai-mcp-server"]
    }
  }
}

또는 게시된 패키지 대신 이 저장소를 로컬에서 클론하고 빌드한 경우:

{
  "mcpServers": {
    "quai": {
      "command": "node",
      "args": ["/absolute/path/to/quai-mcp-server/dist/index.js"]
    }
  }
}

기본적으로 테스트넷을 가리키려면 env 블록을 추가하세요:

{
  "mcpServers": {
    "quai": {
      "command": "npx",
      "args": ["quai-mcp-server"],
      "env": {
        "QUAI_TESTNET_RPC_URL": "https://orchard.rpc.quai.network"
      }
    }
  }
}

(그런 다음 개별 도구 호출에 "network": "testnet"을 전달하세요 — 환경 변수는 엔드포인트를 설정하며 호출별 기본 네트워크는 설정하지 않습니다).

Claude Code에 등록

claude mcp add quai -- npx quai-mcp-server

또는 로컬 빌드의 경우:

claude mcp add quai -- node /absolute/path/to/quai-mcp-server/dist/index.js

개발

npm run dev     # tsc --watch
npm run build   # one-shot build to dist/
npm start        # run the built server directly (stdio) -- mainly useful for manual smoke tests

서버는 v1에서 stdio를 통해서만 MCP를 사용합니다. HTTP 전송은 없습니다.

설계 노트

  • 원시 RPC 대신 quais: 모든 도구는 수제 eth_/quai_ JSON-RPC 호출 대신 quais SDK의 JsonRpcProvider, Contract 및 주소 유틸리티를 통해 진행되므로 영역 해석, 응답 형식 및 오류 형태가 Quai 생태계의 나머지 부분과 일관성을 유지합니다.

  • 하나의 공급자, 여러 영역: 기본 게이트웨이 URL(예: https://rpc.quai.network)을 가리키는 단일 JsonRpcProvider가 Prime 체인에서 활성 영역을 자동으로 발견하고 각 호출을 올바른 영역으로 라우팅합니다 — 대부분의 도구는 영역별 URL을 구성하지 않습니다.

  • 커스텀 암호화가 아닌 표준 도구로 관리: 지갑은 수제 방식이 아닌 quais의 Ethereum V3 키스토어 형식 구현(scrypt + AES-128-CTR + MAC)을 사용하여 저장됩니다 — geth와 MetaMask가 사용하는 것과 동일한 잘 검토된 방식입니다. 전체 모델은 위의 "지갑" 섹션을 참조하세요.

  • 오류는 스택 추적이 아닌 텍스트: RPC/계약 오류는 포착되어 모델에 원시 예외 객체를 누출하는 대신 짧고 구체적인 메시지(예: "Contract call reverted: ...", "Insufficient funds: ...", "Incorrect password for wallet...", "not a validly checksummed Quai address")로 다시 작성됩니다.

  • 확인은 단순한 클라이언트 힌트가 아닌 실제 게이트: 쓰기 도구는 readOnlyHint: false(전송의 경우 destructiveHint: true)로 주석 처리되어 자체 승인 UI가 있는 MCP 클라이언트가 UI를 표시하지만, send_transaction은 또한 서버 측에서 자체 미리보기 → 토큰 → 비밀번호 핸드셰이크를 강제하므로(src/confirmations.ts는 토큰, src/walletStore.ts + decryptKeystoreJson은 비밀번호) 승인 UI가 전혀 없는 클라이언트에서 호출해도 안전합니다.

  • 비밀번호는 마지막 순간에 한 번만 필요: 전송 미리보기는 키스토어 파일의 암호화되지 않은 부분에서 지갑 주소를 직접 해석하고 VoidSigner(가스는 추정할 수 있지만 서명할 수 없는 quais 서명자)를 사용하여 비용을 추정합니다 — 복호화나 비밀번호가 필요 없습니다. 최종 confirm: true 호출만 키를 복호화하며, 해당 호출 기간 동안만 복호화합니다.

  • ETX는 별도의 코드 경로가 아님: 다른 영역의 주소로 전송하는 것은 동일 영역 전송과 정확히 동일한 send_transaction 호출을 사용합니다 — 서명된 트랜잭션이 송신자의 영역에 도달하면 Quai 네트워크가 교차 영역 라우팅(외부 트랜잭션으로)을 투명하게 처리합니다. 도구는 관련된 영역을 감지하고 보고하여 호출자가 무엇을 기대할지 알 수 있게 합니다.

  • Qi 지갑은 호출 간 상태 비저장, 의도적: create_qi_wallet/import_qi_wallet은 니모닉을 암호화만 합니다. get_qi_balance와 convert_qi_to_quai는 캐시된 주소/UTXO 상태를 읽는 대신 매 호출마다 QiHDWallet을 처음부터 재구성하고 주소를 다시 파생합니다(src/qiWallet.ts) — 읽을 상태가 없습니다. 이는 약간의 성능(모든 Qi 작업이 캐시를 사용하는 대신 다시 파생하고 다시 쿼리)을 더 단순하고 실수하기 어려운 보안 구조와 교환했습니다: 휴지 상태로 존재하는 유일한 것은 중요한 단 하나의 비밀뿐입니다.

Available Tools

17 tools
call_contractCall Quai Contract (Read-Only)A
Read-only

Perform a read-only call (an eth_call equivalent) against a deployed EVM contract on Quai Network and return the decoded result. Provide the contract address, an ABI fragment array containing at least the method being called, the method name, and its arguments. The zone is resolved automatically from the contract address. This never sends a transaction, spends gas, or requires a key -- it works for view/pure methods, and simulates (without broadcasting) state-changing ones. It cannot actually change on-chain state; for that, the not-yet-available send_transaction tool will be needed.

NameRequiredDescriptionDefault
abiYesAn ABI fragment array containing (at least) the function being called. Both JSON ABI objects and human-readable ABI strings (e.g. "function balanceOf(address) view returns (uint256)") are accepted as array elements.
argsNoArguments to pass to the method, in order. Pass large integers (e.g. token amounts) as strings to avoid precision loss.
methodYesThe name of the method to call.
addressYesThe contract address to call, e.g. 0x00...
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint, but the description adds significant behavior beyond them: it never spends gas, never requires a key, simulates without broadcasting state-changing calls, and returns decoded results. This is rich, non-redundant context that helps the agent predict side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then the required inputs, then behavioral caveats and the alternative. Every sentence adds value; there is no filler or repetition of schema content beyond what is necessary for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only call tool with 5 parameters and no output schema, the description covers purpose, input requirements, behavior, limitations, and the alternative tool. It even notes that state-changing calls are simulated rather than broadcast, which fully prepares the agent for expected outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful guidance: it tells the user to provide the address, an ABI fragment array containing at least the method, the method name, and arguments. It also clarifies that zone resolution is automatic, which indirectly explains the network parameter's role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Perform a read-only call (an eth_call equivalent) against a deployed EVM contract on Quai Network and return the decoded result.' It distinguishes itself from siblings by explicitly contrasting with the not-yet-available send_transaction tool and clarifying it cannot change state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: it works for view/pure methods and simulates state-changing ones, but cannot change on-chain state. It names the alternative tool (send_transaction) for state changes, and notes the zone is resolved automatically so users don't need a zone-resolution step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_qi_to_quaiConvert Qi to QUAI (Two-Step Confirmation)A
Destructive

Convert Qi held in a wallet created with create_qi_wallet/import_qi_wallet into QUAI, sent to a QUAI-ledger address. This is the other half of Quai's native ledger swap (see get_conversion_rate and send_transaction's QUAI -> Qi path). Same two-step pattern as send_transaction: first call without "confirm" for a rate-quote preview (no password needed yet); then again with confirm: true, the same confirmationToken, and the wallet's password to actually spend. The preview cannot verify the wallet's Qi balance without the password (Qi requires reconstructing the wallet to check), so a confirm may still fail with insufficient funds even after a clean preview -- that failure is reported plainly, nothing is lost or retried silently.

NameRequiredDescriptionDefault
toYesDestination QUAI-ledger address to receive the converted amount.
amountYesAmount to convert, in Qi (e.g. "0.5"), not Qit.
confirmNoSet true only on the second call, together with confirmationToken and password, to actually convert.
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
passwordNoThe Qi wallet's password. Required only on the confirm: true call.
walletNameYesThe name of a Qi wallet previously created with create_qi_wallet or import_qi_wallet.
confirmationTokenNoThe token returned by the initial preview call. Required when confirm is true.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as mutating and destructive, but the description adds substantial behavioral detail: the preview call needs no password, the preview cannot verify Qi balance because of wallet reconstruction, and a confirm may fail with insufficient funds after a clean preview with the failure reported plainly and no silent retry. This goes well beyond the annotations and matches them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, each earning its place: core action, sibling relationship, two-step flow, and a critical failure caveat. The description is front-loaded with the purpose and then layers usage and risk information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description provides prerequisites (wallet must come from create_qi_wallet/import_qi_wallet), the two-step invocation pattern, the need for confirmationToken and password, and the possible late insufficient-funds failure. An agent has effectively all the contextual information needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds a temporal dimension beyond isolated property descriptions, linking confirm, confirmationToken, and password into the two-step flow and clarifying that the first call omits confirm. It reinforces that amount is in Qi, though the schema already states this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Convert'), resource ('Qi held in a wallet created with create_qi_wallet/import_qi_wallet'), and target ('a QUAI-ledger address'). It also distinguishes itself from siblings by explicitly naming itself 'the other half of Quai's native ledger swap' and pointing to the reverse path in send_transaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes to alternatives: 'see get_conversion_rate and send_transaction's QUAI -> Qi path.' It gives precise when-to-use guidance by describing the two-step preview/confirm pattern and exactly when password and confirmationToken are required, leaving no ambiguity about the call sequence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_qi_walletCreate Qi WalletA

Generate a new Qi-ledger wallet (Quai's UTXO-based ledger, distinct from the account-based QUAI wallets create_wallet makes) and store it encrypted under a name and password. Use this so a QUAI -> Qi conversion (see send_transaction / get_conversion_rate) has somewhere real to land that this server can later check the balance of and convert back to QUAI with convert_qi_to_quai -- without a Qi wallet, converting into Qi sends it somewhere you may have no way to use again. Internally this is an HD (mnemonic-based) wallet, since Qi requires deriving addresses and scanning unspent outputs rather than a single keypair; only the mnemonic is encrypted at rest (same V3 keystore scheme as create_wallet: scrypt + AES-128-CTR + MAC), and it is never returned in this tool's output. Tip: create_wallet can create one of these automatically alongside a new QUAI wallet (pairQiWallet, on by default) -- use this tool directly only when you want a standalone Qi wallet or a different zone/name.

NameRequiredDescriptionDefault
nameYesA name for this wallet (letters, numbers, "-", "_"; 1-64 chars). Must not already be used by another Qi wallet -- reusing a QUAI wallet's name pairs with it (see create_wallet's pairQiWallet).
zoneNoThe zone the receiving address should belong to.cyprus1
passwordYesPassword to encrypt the wallet with (minimum 8 characters). Not stored anywhere.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

All annotations are false, so the description carries the full disclosure burden. It discloses that the wallet is HD/mnemonic-based, that only the mnemonic is encrypted at rest using a specific V3 keystore scheme, and that the mnemonic is never returned. It also warns that without a Qi wallet converted funds may be unrecoverable, a meaningful behavioral consequence beyond what annotations or schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is substantial yet dense: purpose, usage, internal behavior, security, and alternative routing are each covered in order with no redundant filler. The most decision-relevant information—what it creates, when to use it, and what happens without it—is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers prerequisites, consequences, alternatives, internal mechanics, and security, which is unusually complete for a create tool with no annotations and no output schema. The only gap is that it never states what the successful response contains (e.g., address, zone, or name), which an agent may need when using the returned wallet; this keeps it from a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has clear semantics. The description reinforces that name and password are used for storage/encryption and hints at zone/name as reasons for direct use, but it adds little beyond what the schema already documents. The baseline of 3 for full schema coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Generate a new Qi-ledger wallet'), identifies the ledger type (UTXO-based), and explicitly contrasts it with account-based QUAI wallets from create_wallet. This makes the tool's purpose unambiguous and clearly differentiates it from the closest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use this tool: as a destination for QUAI->Qi conversions (citing send_transaction / get_conversion_rate) and later convert_qi_to_quai. It also names the alternative create_wallet with pairQiWallet and the conditions for direct use (standalone Qi wallet or different zone/name), giving the agent both inclusion and exclusion rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_walletCreate Quai WalletA

Generate a brand-new Quai (QUAI-ledger) private key and address, and store it encrypted under a name and password -- this is a custodial store: the tool remembers the wallet, you don't have to pass a raw key around again. The private key is encrypted at rest with the standard Ethereum/Web3 V3 keystore format (scrypt + AES-128-CTR + MAC, the same scheme geth and MetaMask use) and written to disk with owner-only file permissions; it is never returned in this tool's output and never logged. Because Quai addresses are location-aware, this 'grinds' (retries with fresh randomness) until the address falls in the zone you ask for (default: cyprus1). Use send_transaction with this wallet's name and password to actually spend from it. By default this ALSO creates a paired Qi-ledger wallet under the same name and password (see pairQiWallet) in the same zone, so a QUAI -> Qi conversion always has somewhere to land that you can actually check and spend from -- set pairQiWallet to false to skip that and only create the QUAI wallet.

NameRequiredDescriptionDefault
nameYesA name for this wallet (letters, numbers, "-", "_"; 1-64 chars). Must not already exist.
zoneNoThe zone the generated address (and paired Qi address, if created) should belong to.cyprus1
passwordYesPassword to encrypt the wallet with (minimum 8 characters). Used for the paired Qi wallet too, if created. You will need this again to send from either. It is not stored anywhere.
pairQiWalletNoIf true (default), also create a Qi-ledger wallet under the same name and password. Set false to create only the QUAI wallet.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the minimal annotations (which only state readOnlyHint=false, etc.) by disclosing encryption details (V3 keystore, scrypt, AES-128-CTR, MAC), file permissions, that the private key is never returned or logged, that address generation 'grinds' until it lands in the requested zone, and that a paired Qi wallet is created by default. This is rich, actionable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense, with no fluff. It opens with the core purpose and then systematically covers security, behavior, and usage. Some details, like the exact keystore cipher suite, could be seen as more than strictly necessary, but they serve to build trust and clarify behavior, so every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description thoroughly covers what happens, what is stored, how security works, and how to spend later. The only notable gap is that it never states what the tool actually returns (e.g., wallet address or confirmation). This is a minor omission given the depth of other context, but it is still a gap for an agent that needs to use the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters. The description adds meaningful context beyond the schema: it explains why 'zone' matters (location-aware addresses, grinding), that 'password' is reused for the paired Qi wallet, and what pairQiWallet=true actually implies for conversions. This elevates it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Generate') and names the precise resource ('Quai (QUAI-ledger) private key and address'), clearly distinguishing it from import_wallet by emphasizing 'brand-new' and from create_qi_wallet by explaining the paired Qi wallet behavior. The custodial-store framing and explicit tie to send_transaction leave no ambiguity about what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use send_transaction with the wallet's name and password to spend from it, and gives a concrete condition for skipping the paired Qi wallet via pairQiWallet=false. It does not explicitly contrast with import_wallet or create_qi_wallet, but the 'brand-new' wording and paired-wallet explanation imply the appropriate alternatives, so the guidance is clear if not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balanceGet Quai BalanceA
Read-only

Get the QUAI balance of an address on Quai Network. Quai is a sharded network where every address belongs to a specific zone (e.g. cyprus1, paxos2); this tool resolves the correct zone automatically from the address itself, so you never need to specify a shard yourself. Returns the balance in both raw wei and formatted QUAI. Read-only: no gas, signing, or private key required.

NameRequiredDescriptionDefault
addressYesThe Quai address to check the balance of, e.g. 0x00...
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
blockTagNoOptional block number, hex block number, or tag ("latest", "earliest") to query at. Defaults to "latest".

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description adds meaningful behavioral detail: it automatically resolves the correct zone, returns balances in both raw wei and formatted QUAI, and requires no gas, signing, or private key. These details are especially useful because there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose appears in the first sentence, followed by the most important behavioral caveat and return format. Every sentence contributes context without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with three well-schema-documented parameters, the description covers all essential aspects: what is returned, the automatic zone resolution behavior, and the absence of signing/gas requirements. The lacking output schema is partially mitigated by explicitly stating the return units.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already well documented. The description adds value by clarifying that the address parameter is sufficient and that zone/shard selection is resolved internally, which prevents an agent from searching for a nonexistent zone parameter. It does not add meaning for network or blockTag, but the schema already covers those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action (get), the resource (QUAI balance of an address), and the network (Quai Network). It also distinguishes itself from siblings such as get_qi_balance by explicitly naming QUAI, and from resolve_zone by stating that zone resolution is handled automatically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: whenever an agent needs an address's QUAI balance, and it explains that no shard specification is needed. It does not explicitly mention when not to use it or name alternatives like get_qi_balance, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_blockGet Quai BlockA
Read-only

Fetch a block from a specific Quai Network chain. Quai is a hierarchy of Prime, Region, and Zone chains, so a block number alone is not globally unique -- you must also say which chain to read from (e.g. "cyprus1" for a zone, "cyprus" for its region, or "prime"). Accepts a block number (decimal or 0x-hex), a block hash (0x + 64 hex chars), or a tag ("latest", "earliest", "pending"). If you only have an address and need its zone, call resolve_zone first.

NameRequiredDescriptionDefault
blockYesBlock number (decimal or 0x-hex), block hash (0x...), or tag: "latest", "earliest", "pending".
shardYesThe chain to query. One of: prime, cyprus, paxos, hydra, cyprus1, cyprus2, cyprus3, paxos1, paxos2, paxos3, hydra1, hydra2, hydra3.
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
includeTransactionsNoIf true, include full transaction objects in the block instead of just their hashes.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only behavior, and the description adds non-obvious context: block numbers are not globally unique across Prime/Region/Zone, so the shard is mandatory. It also clarifies accepted identifier formats and the address-to-zone precondition. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The core capability and the non-obvious shard prerequisite are front-loaded, and the trailing resolve_zone pointer is directly relevant to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complex chain hierarchy and the absence of an output schema, the description covers the essential operational knowledge: how to specify the chain, what identifiers are accepted, and the address-to-zone precondition. It does not describe the response shape, but that is not required to select or invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by giving concrete chain examples (cyprus1, cyprus, prime), explaining the accepted block identifier forms, and stressing that shard disambiguates the block lookup beyond what the enum alone conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description begins with 'Fetch a block from a specific Quai Network chain' — a precise verb and resource. It then unpacks the hierarchy requirement so an agent won't confuse block lookup with transaction lookup, and the shard-qualification warning distinguishes its invocation semantics from ordinary single-chain block fetchers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when the tool is the right call: fetching a block by number, hash, or tag on a particular shard. It also gives a concrete routing rule — if you only have an address, call resolve_zone first. It doesn't explicitly say when not to use it versus get_transaction, but the read-context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conversion_rateGet QUAI <-> Qi Conversion RateA
Read-only

Quote a conversion between Quai's two native ledgers: QUAI (account-based, EVM) and Qi (UTXO-based, like Bitcoin -- this is Quai's own built-in swap, not a third-party DEX. Returns the current on-chain rate for converting a given amount in one direction, as of the latest block in the given zone. This is read-only and doesn't move anything -- to actually convert QUAI into Qi, send_transaction to a Qi-ledger address (it detects this automatically and shows the same estimate in its preview). Converting Qi into QUAI is not supported by this server yet: Qi is UTXO-based and needs a different kind of wallet (one that scans and manages unspent outputs) than the single-key wallets this server currently stores.

NameRequiredDescriptionDefault
zoneYesThe zone to get the rate in -- rates can differ slightly by zone.
amountYesAmount to convert, in the source currency's human units (e.g. "10" QUAI, or "5" Qi).
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
directionYesWhich way to convert. Only quai_to_qi is currently executable via send_transaction; qi_to_quai is quote-only here.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint, and the description reinforces 'read-only and doesn't move anything' while adding behavior beyond the annotation: the rate is current as of the latest block in the zone, it is on-chain, and the reverse direction is quote-only. This is valuable context even though the discussion of QI-to-QUAI support is questionable given the sibling list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and each sentence adds substantive context: what is quoted, how to actually convert, and the reverse-direction limitation. It is slightly long, but the extra clauses about the built-in swap and wallet differences earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition covers the tool's domain, zone/network behavior, read-only nature, and conversion limitations. However, it does not describe the response shape or numeric rate format, and with no output schema that gap matters; it also overlooks the convert_qi_to_quai sibling when discussing QI-to-QUAI support.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all four parameters with descriptions and enums, so the baseline is 3. The description adds useful meaning by clarifying that amounts are in the source currency's human units and that quai_to_qi is executable via send_transaction while qi_to_quai is quote-only, going beyond the enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence clearly names the operation ('Quote a conversion') and identifies the two native ledgers (QUAI and Qi), and the rest scopes it to an on-chain rate at the latest block in a zone. It also distinguishes this from a third-party DEX and from send_transaction, so an agent can tell what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful routing: use send_transaction to actually convert QUAI to Qi, and treat qi_to_quai as quote-only. However, it claims QI-to-QUAI conversion is not supported by this server, even though a sibling tool named convert_qi_to_quai exists; it should mention that sibling as the alternative instead of declaring the operation impossible. That makes the guidance partially misleading.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_qi_balanceGet Qi Wallet BalanceA
Read-only

Check the Qi balance of a wallet created with create_qi_wallet or import_qi_wallet. Unlike get_balance (QUAI), this needs the wallet's password: Qi is UTXO-based, so checking a real balance means reconstructing the wallet from its mnemonic and asking the network for its unspent outputs, not just reading a stored public address. Returns both the total and spendable balance (spendable excludes still-immature/locked outputs). Funds received via a payment code (see send_qi) are NOT included unless you pass the sender's payment code in counterpartyPaymentCodes -- those addresses are pairwise-derived between the two payment codes and can't be discovered any other way.

NameRequiredDescriptionDefault
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
passwordYesThe wallet's password.
walletNameYesThe name of a Qi wallet previously created with create_qi_wallet or import_qi_wallet.
counterpartyPaymentCodesNoPayment codes of people who may have sent this wallet Qi via send_qi. Omit if you're only checking regular (non-payment-code) receipts.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the actual mechanism: reconstructing the wallet from its mnemonic and querying network unspent outputs rather than reading a stored public address. It also explains spendable vs total balance, maturity exclusions, and the payment-code address derivation limitation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then adds the differentiator, return semantics, and caveat in a logical order. Every sentence contributes meaningful guidance without filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the readOnlyHint, openWorldHint, and fully documented schema, the description covers all non-obvious calling concerns: when to use it, why the password is needed, how the balance is computed, what the return values represent, and when counterpartyPaymentCodes is mandatory. The lack of an output schema is mitigated by the explicit return description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds meaning to password by explaining why it is required (mnemonic reconstruction) and to counterpartyPaymentCodes by clarifying that payment-code addresses are pairwise-derived and otherwise undiscoverable. This goes beyond the schema's basic field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action and resource: 'Check the Qi balance of a wallet', scoped to wallets created with create_qi_wallet or import_qi_wallet. It also distinguishes itself from get_balance (QUAI), so an agent can tell them apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly contrasts this tool with get_balance (QUAI) and explains why the password is needed for Qi UTXO balance reconstruction. It also gives the condition for when to pass counterpartyPaymentCodes for payment-code funds, naming send_qi as the relevant sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_qi_payment_codeGet Qi Payment CodeA
Read-only

Get the reusable BIP-47 payment code for a Qi wallet -- this is what you hand someone so they can send you Qi via send_qi, the same way you'd hand out an address, except a payment code is not itself an on-chain address: it derives a fresh one behind the scenes for each sender. Requires the password because deriving it needs the wallet's BIP-47 key material from its mnemonic. Purely local -- no network call.

NameRequiredDescriptionDefault
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
passwordYesThe wallet's password.
walletNameYesThe name of a Qi wallet previously created with create_qi_wallet or import_qi_wallet.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint annotation: it explains that the operation is purely local with no network call, that it requires the password because BIP-47 key material is derived from the mnemonic, and that a fresh on-chain address is derived behind the scenes per sender. This gives the agent a clear behavioral model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense passage with no filler. It front-loads the core action and definition, then efficiently explains the key distinction, the password requirement, and the local nature of the operation. Every sentence contributes essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with a fully documented schema and relevant annotations, the description covers the important behavioral context: purpose, usage, password need, and local execution. It does not explicitly describe the return value format, but given the tool name and context, an agent can reasonably infer it returns the payment code.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, satisfying the baseline. The description adds meaningful context by explaining why password is required and that the derivation is local, which helps the agent understand the role of that parameter beyond the schema's 'The wallet's password.' It does not repeat every parameter, but it adds value where it matters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Get the reusable BIP-47 payment code for a Qi wallet.' It further clarifies what the thing is for and explicitly distinguishes it from an on-chain address, so an agent can clearly understand the tool's unique purpose relative to siblings like send_qi and get_qi_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: this is what you hand someone so they can send you Qi via send_qi, analogous to handing out an address. It does not explicitly enumerate when not to use it or name alternative tools beyond referencing send_qi, but the intended use case is well conveyed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transactionGet Quai TransactionA
Read-only

Look up a transaction on Quai Network by its hash and return its details (from, to, value, gas, status) plus the receipt when available. Also reports which zone/shard the transaction landed on -- Quai resolves this automatically from the hash itself, so you do not need to know it in advance.

NameRequiredDescriptionDefault
hashYesThe transaction hash to look up, e.g. 0x...
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description specifies exactly what the tool returns, including the conditional nature of the receipt ('when available'), and explains the automatic zone-resolution behavior. This is especially valuable because there is no output schema to carry that information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences cover the operation, the return fields, and the important zone/shard caveat without repetition or filler. The core lookup behavior is front-loaded, and every clause adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple two-parameter schema, fully documented parameters, and read-only annotations, the description is complete enough for an agent to select and invoke the tool correctly. It supplies the return contract that would otherwise be missing due to the lack of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both hash and network parameters are already well documented in the schema. The description reinforces that lookup is by hash but adds no meaningful parameter-level meaning beyond what the schema provides, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Look up a transaction on Quai Network by its hash') and names the returned details (from, to, value, gas, status) plus receipt. The automatic zone/shard resolution distinguishes it clearly from related tools like resolve_zone and from balance/block lookups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use the tool: when you need transaction details by hash. It also explicitly tells the agent it does not need to know the zone/shard in advance, preventing unnecessary calls to resolve_zone. However, it does not name alternative tools or state exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_qi_walletImport Qi WalletA

Import an existing Qi-ledger wallet from its BIP-39 mnemonic phrase into this server's encrypted store, under a name and password. Same encryption as create_qi_wallet (only the mnemonic is encrypted at rest, never the phrase itself in this tool's output). The receiving address for the given zone is re-derived deterministically from the phrase.

NameRequiredDescriptionDefault
nameYesA name for this wallet (letters, numbers, "-", "_"; 1-64 chars). Must not already be used by another Qi wallet -- reusing a QUAI wallet's name pairs with it (see create_wallet's pairQiWallet).
zoneNoThe zone to derive the receiving address in.cyprus1
mnemonicYesThe existing BIP-39 mnemonic phrase (space-separated words) for this Qi wallet.
passwordYesPassword to encrypt the wallet with (minimum 8 characters). Not stored anywhere.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only record that this is not read-only/destructive, leaving behavioral context to the description. The description adds that the mnemonic is encrypted at rest, that the phrase is not emitted in the tool's output, and that the receiving address is deterministically re-derived from the phrase, which materially informs the agent about privacy and determinism. It does not contradict 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all useful, with the core action front-loaded and the encryption/output caveat earning its place. The phrasing around 'only the mnemonic is encrypted... never the phrase itself' is slightly redundant and awkward, keeping it from top marks for polish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool description, schema, and annotations together let an agent select parameters correctly and understand the core operation, including encryption and deterministic derivation. Since there is no output schema, the absence of a precise return-value description or duplicate-import error behavior leaves a small but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description need not repeat parameter details; the baseline is 3. It adds mild semantic color by tying the zone parameter to deterministic address re-derivation, but this largely mirrors the schema's own zone description rather than providing new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete action ('Import an existing Qi-ledger wallet...'), names the source (BIP-39 mnemonic) and destination (server's encrypted store), and goes beyond the title by mentioning deterministic address derivation. It clearly identifies this as an import operation for Qi wallets, though it does not explicitly contrast it with sibling tools like import_wallet or create_qi_wallet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use statement or named alternative; the agent must infer that an existing Qi wallet with a mnemonic should use this tool rather than create_qi_wallet. The reference to 'Same encryption as create_qi_wallet' provides context but no exclusion or alternative-routing guidance, so usage guidance remains implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_walletImport Quai WalletA

Import an existing Quai private key into this server's encrypted wallet store, under a name and password, so it can be used with send_transaction without passing the raw key around again. Uses the same standard Ethereum/Web3 V3 keystore encryption as create_wallet (scrypt + AES-128-CTR + MAC), written to disk with owner-only file permissions. The private key you pass in is used once to encrypt and is never returned or logged. Whichever zone the key's address belongs to is detected automatically -- Quai addresses can't be moved between zones.

NameRequiredDescriptionDefault
nameYesA name for this wallet (letters, numbers, "-", "_"; 1-64 chars). Must not already exist.
passwordYesPassword to encrypt the wallet with (minimum 8 characters). Not stored anywhere.
privateKeyYesThe existing private key to import (0x-prefixed or not).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only indicate readOnlyHint=false, idempotentHint=false, etc., so the description carries the burden of explaining behavior. It adds meaningful details: the private key is used once, never returned, and never logged; disk files use owner-only permissions; the password is not stored; and the address's zone is auto-detected and cannot be changed. It does not describe failure behavior on duplicate names, but the schema already covers the uniqueness constraint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: three sentences, with the core purpose front-loaded, then security-relevant details, then zone behavior. Every sentence adds distinct information without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema, the description covers the invocation-critical aspects: purpose, parameter handling, security, and zone constraints. It does not state what the successful return value is, which would be helpful, but an agent can reasonably infer completion and use related tools like list_wallets to verify. This leaves only a minor completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters already documented (name constraints, password minimum, private key format). The description adds security context, such as 'never returned or logged,' but does not meaningfully expand parameter semantics beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (import), a specific resource (an existing Quai private key), and the storage outcome (encrypted wallet store under a name/password). It also connects the tool to send_transaction, making its purpose concrete. It distinguishes itself from create_wallet by focusing on an existing key, and from import_qi_wallet by explicitly saying 'Quai private key'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you have an existing Quai private key and want to avoid passing it around for future send_transaction calls. However, it does not explicitly say when to prefer create_wallet, import_qi_wallet, or another sibling, nor does it state exclusions. The usage guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_walletsList WalletsA
Read-only

List every wallet stored in this server's encrypted wallet store, both QUAI-ledger (create_wallet/import_wallet) and Qi-ledger (create_qi_wallet/import_qi_wallet): name, ledger, address, and zone for each. No password is needed -- addresses are stored in the clear alongside the encrypted key/mnemonic, only spending requires the password. Use this to find the walletName to pass to send_transaction, get_qi_balance, or convert_qi_to_quai.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only; the description adds meaningful behavioral context by disclosing that no password is required and that addresses are stored in the clear alongside encrypted keys, with only spending requiring the password. It also specifies the output fields since no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences all carry signal: the scope, the security-relevant behavior, and the downstream use. It is front-loaded with the core action and avoids filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing with no output schema, the description is fully self-sufficient: it names the resource, included wallet types, every returned field, the auth requirement, and downstream tools that consume the output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema coverage is 100%, so there is nothing for the description to add. The no-parameter baseline of 4 applies; the description correctly spends no space on parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List every wallet stored in this server's encrypted wallet store'), identifies both ledger types, and enumerates the returned fields (name, ledger, address, zone). It clearly distinguishes this tool from create/import/send siblings by framing it as the enumeration endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the primary use ('Use this to find the walletName to pass to send_transaction, get_qi_balance, or convert_qi_to_quai') and clarifies that no password is needed. It does not explicitly contrast with alternative lookup tools, but for a listing tool the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_zoneResolve Quai ZoneA
Read-only

Determine which Quai Network shard/zone a given address belongs to, purely by inspecting the address (no network call). Quai uses location-based addressing: every address encodes both its zone (e.g. cyprus1, paxos2, hydra3) and its ledger (Quai account-based, or Qi UTXO-based) in its bytes, and only works within that zone. Use this before get_balance, get_transaction, or call_contract if you need to explain or confirm which part of the network an address or transaction belongs to.

NameRequiredDescriptionDefault
addressYesA Quai Network address, e.g. 0x00...

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish read-only behavior (readOnlyHint=true), and the description adds meaningful context beyond that: it performs no network call, works purely via local inspection, and treats addresses as zone-bound. This informs the agent about determinism and side-effect-freedom without contradicting 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose and key differentiator ('no network call') appear in the first sentence, followed by a concise background explanation and a clear usage note. No redundant or filler content is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only, local parsing tool, the description covers what the tool does, why it matters, and when to use it. It does not detail the exact return shape or invalid-address handling, but the absence of an output schema makes this a minor gap rather than a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single 'address' parameter with 100% coverage. The description adds value by explaining that the address encodes both zone and ledger and by giving concrete zone examples ('cyprus1, paxos2, hydra3'), which helps the agent interpret the input and understand what the output represents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Determine which Quai Network shard/zone a given address belongs to'), names the resource (address), and explicitly distinguishes its mode ('purely by inspecting the address (no network call)'). It also clarifies the conceptual model (location-based addressing, zone and ledger encoded in bytes), which removes ambiguity about what the tool resolves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool: 'Use this before get_balance, get_transaction, or call_contract if you need to explain or confirm which part of the network an address or transaction belongs to.' It also implies a non-network, local operation, helping the agent choose it over network-dependent siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_docsSearch Quai DocsA
Read-only

Search a small curated index of Quai Network developer documentation -- sharding model, location-based addressing, the quais SDK, network endpoints, wallets, faucet, contracts -- and get back relevant snippets with links to the official docs. Use this to explain a Quai concept, find the right doc page, or clarify terminology (e.g. what a 'Zone' or 'Qi ledger' is). This is an offline index, not a live web search, so for anything it doesn't cover, say so and point at docs.qu.ai directly rather than guessing.

NameRequiredDescriptionDefault
queryYesWhat to search for, e.g. "how are addresses assigned to zones" or "faucet".
maxResultsNoMaximum number of results to return.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description reinforces this by noting it is 'an offline index, not a live web search.' It also discloses the limitation that results only cover topics in the curated index and instructs the agent to avoid guessing. This adds useful behavioral context beyond the minimal annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences contain the action, the scope, concrete usage examples, and an explicit limitation/fallback path. Every sentence earns its place, and the key purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only search tool, the description covers what it searches, what it returns (snippets with links), when to use it, and how to handle misses. No output schema is present, but the return format is sufficiently described. The agent can invoke this tool correctly without further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already fully documented. The description adds helpful query examples for the query parameter, which improves usability, but it does not enrich the semantics of maxResults beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and resource ('small curated index of Quai Network developer documentation') and states the output ('relevant snippets with links to the official docs'). It clearly distinguishes this documentation-search tool from the on-chain/sibling tools like get_transaction or get_balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool ('explain a Quai concept, find the right doc page, or clarify terminology') and gives a concrete fallback behavior for uncoveed topics: say so and point at docs.qu.ai rather than guessing. This is strong, actionable usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_qiSend Qi to a Payment Code (Two-Step Confirmation)A
Destructive

Send Qi from a wallet created with create_qi_wallet/import_qi_wallet to a recipient's BIP-47 payment code (see get_qi_payment_code) -- not a plain address. Qi peer-to-peer transfers work this way for privacy: a payment code is a reusable identifier from which a fresh address is derived for every send, rather than reusing one static address. Sender and recipient can be in different zones (destinationZone). Same two-step pattern as send_transaction and convert_qi_to_quai: preview first (no password needed) to see a confirmationToken, then confirm: true with that token and the wallet password to actually sign and send. The preview cannot verify the wallet's Qi balance (that needs the password), so a confirm can still fail with insufficient funds even after a clean preview.

NameRequiredDescriptionDefault
amountYesAmount to send, in Qi (e.g. "0.5"), not Qit.
confirmNoSet true only on the second call, together with confirmationToken and password, to actually send.
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
passwordNoThe sender wallet's password. Required only on the confirm: true call.
walletNameYesThe name of a Qi wallet previously created with create_qi_wallet or import_qi_wallet.
destinationZoneYesWhich zone the recipient wants to receive the funds in.
confirmationTokenNoThe token returned by the initial preview call. Required when confirm is true.
recipientPaymentCodeYesThe recipient's Base58 BIP-47 payment code (from get_qi_payment_code on their end).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false and destructiveHint=true, so the description carries the burden of explaining actual behavior. It does this thoroughly: two-step confirmation, preview requiring no password, confirm signing and sending, and the important caveat that preview cannot verify balance so confirm can fail despite a clean preview. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed but every sentence earns its place. The core distinction (payment code vs plain address) is front-loaded, then the privacy rationale and two-step flow are explained compactly. It is appropriately sized for a tool with a non-obvious confirmation workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and 8 parameters, the description covers what an agent needs: wallet prerequisites, recipient payment code origin, destination zone relevance, the exact two-step call sequence, and the insufficient-funds failure mode. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful workflow semantics beyond the schema: it explains how confirm, confirmationToken, and password relate to the two-step preview/confirm pattern, and it reinforces that amount is in Qi. This exceeds the baseline without duplicating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Send Qi from a wallet ... to a recipient's BIP-47 payment code.' It explicitly distinguishes this tool from sending to a plain address, which separates it from siblings like send_transaction. It also ties the payment code to get_qi_payment_code, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear when-to-use guidance: use this for Qi peer-to-peer transfers to a payment code, not a plain address. It also names sibling tools with the same two-step pattern (send_transaction, convert_qi_to_quai) and explains the preview-then-confirm workflow, including when password and confirmationToken are required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_transactionSend QUAI (Two-Step Confirmation)A
Destructive

Send QUAI from a wallet in this server's encrypted store to a recipient address. Because Quai is sharded, the recipient may be in a different zone than the sender; if so, this is an external transaction (ETX) and is handled automatically by the network, just with slower finality than a same-zone send. If the recipient is a Qi-ledger address instead of a QUAI-ledger one, this is instead a QUAI -> Qi conversion (Quai's native "swap" between its two ledgers) -- the preview will say so and estimate what you'll receive in Qi (see get_conversion_rate for a quote without sending). This tool ALWAYS requires two calls: first without "confirm" (no password needed yet) to get a preview -- amounts, zones, estimated gas, a confirmationToken; then again with confirm: true, that same confirmationToken, and the wallet's password, to actually decrypt the key, sign, and send. The password is only ever used in-memory for that one call and is never stored or logged.

NameRequiredDescriptionDefault
toYesRecipient Quai address.
amountYesAmount to send, in QUAI (e.g. "1.5"), not wei.
confirmNoSet true only on the second call, together with confirmationToken and password, to actually broadcast.
networkNoWhich Quai network to query: "mainnet" or "testnet" (the Orchard testnet). Defaults to mainnet.mainnet
passwordNoThe wallet's password. Required only on the confirm: true call, to decrypt the key and sign.
walletNameYesThe name of a wallet previously created with create_wallet or import_wallet (see list_wallets).
confirmationTokenNoThe token returned by the initial preview call. Required when confirm is true.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: the mandatory two-step confirmation, password only held in memory and never stored or logged, automatic ETX handling with slower finality, and the QUAI-to-Qi conversion path. This is exactly the kind of non-obvious behavior an agent needs, and it does not contradict the destructiveHint/readOnlyHint annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but every sentence earns its place: purpose, sharding/ETX behavior, conversion context, two-call workflow, and security guarantee. It is front-loaded with the core action and then layers necessary procedural detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent mutation tool with no output schema, the description is unusually complete. It tells the agent exactly what the preview returns, when the password is required, what confirmationToken is, and what happens in the ETX and conversion cases. There is very little left for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description enhances this by explaining the lifecycle of confirm, password, and confirmationToken across the two required calls, and it contextualizes amount as QUAI not wei, matching but reinforcing the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Send QUAI from a wallet in this server's encrypted store to a recipient address.' It goes further by distinguishing same-zone sends, ETX sends, and QUAI-to-Qi conversions, making it easy to separate from sibling tools like get_conversion_rate and send_qi.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit workflow guidance: always requires two calls, first without confirm for a preview, then with confirm, confirmationToken, and password to broadcast. It points to get_conversion_rate as a quote-without-sending alternative. However, it does not explicitly say 'for pure Qi sends use send_qi,' so the exclusion of a close sibling is left implicit.

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.

  1. 17 tool updatesv0.1.0
    • First observedcall_contract
    • First observedconvert_qi_to_quai
    • First observedcreate_qi_wallet
    • First observedcreate_wallet
    • First observedget_balance
    • First observedget_block
    • First observedget_conversion_rate
    • First observedget_qi_balance
    • First observedget_qi_payment_code
    • First observedget_transaction
    • First observedimport_qi_wallet
    • First observedimport_wallet
    • First observedlist_wallets
    • First observedresolve_zone
    • First observedsearch_docs
    • First observedsend_qi
    • First observedsend_transaction

TDQS

A4.2/5.0

Scored across 17 tools

Disambiguation4/5

Each tool targets a distinct resource (blocks, transactions, balances, wallets, conversions), and the QUAI vs Qi split is clearly delineated. The only minor overlap is send_transaction also covering QUAI→Qi conversion, which send_qi and convert_qi_to_quai handle separately, but descriptions clarify the paths.

Naming Consistency5/5

All tools use a predictable verb_first snake_case pattern (get_, create_, import_, send_, resolve_, call_, search_, list_, convert_). Ledger-specific variants are consistently prefixed with qi rather than mixed into inconsistent conventions.

Tool Count4/5

Seventeen tools is slightly beyond the 3–15 sweet spot, but the domain is genuinely large: two ledgers, sharded chains, wallet lifecycle, and conversion flows. Each tool addresses a real operation, so the count feels dense rather than bloated.

Completeness4/5

The surface covers querying, wallet lifecycle (create/import/list), QUAI and Qi transfers, and the native conversion both ways, which is solid for the domain. Minor gaps remain: no wallet deletion, no Qi transaction/UTXO detail lookup, and no contract state-changing sends (though send_transaction exists despite call_contract's stale description).

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers