Read-only MCP server exposing Unlock Protocol on-chain state
Three well-named, read-only tools with comprehensive descriptions (194 - 280 chars each, within baseline 34 - 392 range). All tools have explicit input schemas with typed parameters and descriptions. Error handling is present but generic ('Unexpected error'). Tool composition is sound, each does one thing. Key gaps: no output schema documentation, no pagination despite list tool capping at 100 results, and error messages lack recovery guidance per pattern:recovery-guide.
Check whether a wallet holds a valid (non-expired) key for a specific Unlock Protocol lock, read-only. Returns status (valid, expired, no_key, not_a_contract, or not_a_lock), lock name, tokenId, and expiration. Use this when you already know the lock address to check; use unlock_list_keys instead when you need every lock a wallet holds and don't know the addresses up front. The verdict normally comes from the lock's own getHasValidKey; on locks that predate it, the call falls back to comparing the read expiration to the local clock and reports verdictSource: "local_clock" (absent when the contract answered). Set requireContractVerdict to fail instead of accepting that fallback.
Read an Unlock Protocol lock's public shape from the chain, read-only: name, symbol, key price/currency, expiration duration, max keys, and total keys sold.
List every Unlock Protocol key a wallet holds across locks on a network, via the Unlock subgraph, read-only. Returns each key's lock address and name, tokenId, expiration, and validity, sorted by expiration descending and capped at 100 results with a truncation flag. Use this when you need every membership a wallet holds and don't know the lock addresses up front; use unlock_check_membership instead when you already know which lock to check.
Output schemas not documented. LLMs cannot infer response structure or plan downstream calls. Pattern:tool requires documented return types.
Error messages are generic ('Unexpected error checking membership') and do not guide recovery. Pattern:recovery-guide requires actionable next steps.
unlock_list_keys caps results at 100 with truncation flag but lacks pagination parameters (limit, offset, cursor). Pattern:paginated-result requires pagination support.
Parameter descriptions lack format/constraint details. E.g., 'walletAddress' should specify '0x-prefixed Ethereum address' and 'network' should enumerate valid values (base, mainnet, etc.).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Tool descriptions mention fallback behavior (verdictSource, local_clock) but do not explain when/why LLMs should prefer one tool over another in ambiguous scenarios.