nulucre-wallet-reputation
Server Details
Wallet trust scores for AI agents. Stellar, XRPL, EVM 81+ chains. OFAC sanctions. x402 payments.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- vjshaw/nulucre-agents
- GitHub Stars
- 0
TDQS
Scored across 4 tools
Each tool targets a distinct resource and action: a service-status check plus three chain-specific scoring tools (EVM, Stellar, XRPL). The descriptions explicitly cross-reference each other with 'Don't use when... use X instead' guidance, making misselection nearly impossible.
All four tools follow the identical nulucre_<verb>_<noun> snake_case pattern (check_service_status, get_evm_wallet_score, etc.) with a consistent server prefix. No deviations or mixed conventions.
Four tools is well-scoped for a read-only reputation oracle: one health check and one scorer per supported chain family. No redundant or filler tools, and each earns its place.
Coverage spans the key EVM, Stellar, and XRPL ecosystems plus uptime checking, but the server bills itself as multi-chain and omits other major families (e.g. Solana, Cosmos) and any batch-scoring operation. These are minor gaps an agent can work around by issuing per-wallet calls.
Available Tools
4 toolsnulucre_check_service_statusCheck Nulucre Service StatusARead-onlyIdempotentInspect
Check whether the live Nulucre reputation oracle service is online. This is a free endpoint that requires no payment.
Use this tool to verify Nulucre is reachable before relying on it for wallet scoring decisions, or for general uptime monitoring.
Args: none
Returns: Structured data with schema: { "status": string, // "online" if the service is reachable "service": string // service name }
Examples:
Use when: "Is Nulucre up?" -> no params needed
Use when: checking service availability before a batch of scoring calls
Error Handling:
Returns "Error: ..." with details if the service is unreachable
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower; the description still adds meaningful context: it is a free endpoint requiring no payment, and it discloses the error-return convention ('Error: ...' when unreachable). It stops short of stating rate limits or timeout behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and scoping in the first two sentences, then uses labelled sections. The 'Args: none' line and the example block are mildly redundant, but the structure is easy to scan and every block carries some signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema in the structured data, the description compensates by documenting the return shape (status/service fields) and the error path. Combined with annotations covering safety, an agent has everything needed to call and interpret this zero-arg tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, which sets the baseline at 4. The description explicitly confirms 'Args: none', matching the empty schema and additionalProperties:false, so nothing is ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check whether the live Nulucre reputation oracle service is online'), and the sibling tools are all wallet-scoring calls, so the health-check role is unmistakable. An agent can differentiate this from the scoring tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly says to use it to verify reachability before relying on Nulucre for wallet scoring or for uptime monitoring, and the example section reinforces the trigger ('Is Nulucre up?'). It doesn't name an explicit 'when not to use' alternative, but given the siblings are scoring tools rather than substitutes, the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nulucre_get_evm_wallet_scoreGet EVM Wallet Reputation ScoreARead-onlyIdempotentInspect
Get a 0-100 trust score for an EVM wallet address (0x...) from Nulucre, a multi-chain wallet reputation oracle covering 81+ chains.
The score is computed from on-chain data including wallet age, transaction volume, DeFi activity, and multi-chain presence, pulled from Etherscan, Moralis, Alchemy, and Ankr.
Use this tool to assess counterparty risk before an agent interacts with or pays an EVM wallet on Ethereum, Base, Polygon, Arbitrum, Optimism, or any of the 81+ supported chains.
Args:
wallet (string): EVM wallet address starting with '0x' (42 characters)
signed (boolean): If true, request an ECDSA-P256 signed score for independent verification via Nulucre's public JWKS endpoint (default: false)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: Structured data with schema: { "wallet": string, "score": number, // 0-100 "status": string, // TRUSTED | VERIFIED | CAUTION | RISKY | BLACKLISTED "breakdown": { "": { "score": number, "raw": string }, ... }, "chains"?: string[], "dataSource": string, "timestamp": string, "signature"?: string // present only when signed=true }
Examples:
Use when: "Is this Ethereum wallet trustworthy?" -> wallet="0xabc...", signed=false
Use when: "Get a verifiable score for this 0x address" -> wallet="0xabc...", signed=true
Don't use when: scoring a Stellar G... address (use nulucre_get_stellar_wallet_score instead)
Error Handling:
Returns "Error: Invalid EVM wallet address" if the address format is invalid
Returns a payment-required explanation if the free evaluation quota is exhausted
| Name | Required | Description | Default |
|---|---|---|---|
| signed | No | If true, requests an ECDSA-P256 cryptographically signed score for independent verification (higher cost endpoint) | |
| wallet | Yes | EVM wallet address starting with '0x' (42 characters) | |
| response_format | No | Output format: 'markdown' for human-readable report or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/non-destructive, and the description goes well beyond them: it names the upstream data sources (Etherscan, Moralis, Alchemy, Ankr), explains what the score is derived from, discloses that signing is a higher-cost endpoint verified via a public JWKS, and documents quota exhaustion behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then cleanly sectioned into Args, Returns, Examples, and Error Handling, all of which earn their place. It is somewhat long and the Args block partially repeats the input schema, costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by documenting the full return shape including score bands, breakdown, chains, timestamp, and conditional signature field. Combined with chain coverage and error handling, an agent has everything needed to call and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning: it explains that signed=true enables independent verification through Nulucre's JWKS endpoint, and restates the price/quota implication behind the flag. The wallet and response_format entries largely mirror the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a 0-100 trust score for an EVM wallet address') with scope (81+ chains) and the oracle's data provenance. It explicitly delineates itself from sibling tools by naming the Stellar counterpart in the exclusions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use context ('assess counterparty risk before an agent interacts with or pays an EVM wallet'), concrete trigger examples, and a when-not-to-use clause that routes Stellar addresses to nulucre_get_stellar_wallet_score. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nulucre_get_stellar_wallet_scoreGet Stellar Wallet Reputation ScoreARead-onlyIdempotentInspect
Get a 0-100 trust score for a Stellar wallet address (G...) from Nulucre, a live Stellar-native wallet reputation oracle.
The score is computed from 8 signals pulled directly from the Stellar Horizon API and Stellar Expert — account age, transaction volume, asset diversity, SDEX DEX participation, network trust, claimable balance activity, Soroban contract interactions, and liquidity pool participation, plus a spam detection penalty. No EVM data is used.
Every score includes a real-time sanctions screening result against the OFAC SDN, OFAC Non-SDN, EU Financial Sanctions, and UN Security Council Sanctions lists. A wallet matching any of these lists automatically receives a score of 0 and status BLACKLISTED.
Use this tool to assess counterparty risk before an agent interacts with or pays a Stellar wallet — for example before executing a payment, approving a swap counterparty, or evaluating a new account.
Args:
g_address (string): Stellar wallet address starting with 'G' (56 characters)
signed (boolean): If true, request an ECDSA-P256 signed score for independent verification via Nulucre's public JWKS endpoint (default: false)
response_format ('markdown' | 'json'): Output format (default: 'markdown')
Returns: For JSON format: Structured data with schema: { "wallet": string, "network": "stellar:pubnet", "score": number, // 0-100 "status": string, // TRUSTED | VERIFIED | CAUTION | RISKY | BLACKLISTED "breakdown": { "accountAge": { "score": number, "raw": string }, "txVolume": { "score": number, "raw": string }, "assetDiversity": { "score": number, "raw": string }, "dexParticipation": { "score": number, "raw": string }, "networkTrust": { "score": number, "raw": string }, "claimableActivity": { "score": number, "raw": string }, "sorobanUsage": { "score": number, "raw": string }, "liquidityPools": { "score": number, "raw": string }, "spamPenalty": { "score": number, "raw": string }, "sanctionsCheck": { "score": number, "raw": "CLEAR"|"SANCTIONED"|"UNCHECKED", "source": string } }, "dataSource": string, "timestamp": string, "signature"?: string // present only when signed=true }
Examples:
Use when: "Is this Stellar wallet safe to pay?" -> g_address="GABC...", signed=false
Use when: "Get a verifiable score I can check independently" -> g_address="GABC...", signed=true
Don't use when: scoring an Ethereum or other EVM address (use nulucre_get_evm_wallet_score instead)
Error Handling:
Returns "Error: Invalid Stellar wallet address" if the address format is invalid
Returns a payment-required explanation if the free evaluation quota is exhausted
| Name | Required | Description | Default |
|---|---|---|---|
| signed | No | If true, requests an ECDSA-P256 cryptographically signed score for independent verification (higher cost endpoint) | |
| g_address | Yes | Stellar wallet address starting with 'G' (56 characters) | |
| response_format | No | Output format: 'markdown' for human-readable report or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: the eight signal inputs, the sanctions lists screened (OFAC SDN, EU, UN), the deterministic BLACKLISTED=0 behavior, the higher-cost nature of the signed endpoint, and error handling for invalid addresses and exhausted free quota. That is exactly the behavioral disclosure an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and organized into Args/Returns/Examples/Error Handling sections, which is easy for an agent to scan. It is on the long side, and the g_address phrasing duplicates the schema's pattern description almost verbatim, which is mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so with a full JSON shape including status enum values and the conditional signature field. Combined with error handling and examples, nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: 'signed' is tied to independent verification via the public JWKS endpoint and flagged as a higher-cost path, and the markdown-vs-json tradeoff is spelled out. The g_address explanation largely restates the schema pattern, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get a 0-100 trust score for a Stellar wallet address') and immediately scopes it to the Stellar network, explicitly stating 'No EVM data is used.' It also names the sibling to use instead for EVM addresses, so an agent can distinguish it from nulucre_get_evm_wallet_score and nulucre_get_xrpl_wallet_score without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states concrete when-to-use conditions ('before executing a payment, approving a swap counterparty, or evaluating a new account') and a when-not-to-use clause routing EVM addresses to nulucre_get_evm_wallet_score. The examples section reinforces both positive and negative triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nulucre_get_xrpl_wallet_scoreGet XRPL Wallet Reputation ScoreARead-onlyIdempotentInspect
Get a 0-100 trust score for an XRPL wallet address (r...) from Nulucre. Scored using 7 XRPL Ledger signals: account age, transaction volume, trustline diversity, DEX participation, network trust, payment activity, and spam detection. Includes real-time OFAC/UN/EU sanctions screening. Use before paying or interacting with any XRPL wallet.
| Name | Required | Description | Default |
|---|---|---|---|
| signed | No | If true, request an ECDSA-P256 signed score | |
| r_address | Yes | XRPL wallet address starting with r (25-35 characters) | |
| response_format | No | Output format | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds genuine behavioral context beyond that: the 7 scoring signals and real-time OFAC/UN/EU sanctions screening tell the agent what the result represents. It omits return format, latency, and any rate-limit/auth behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the core purpose and scoring basis front-loaded. No filler, though the signal list is dense and could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-address lookup with no output schema and full schema coverage, the description adequately explains what the score is composed of and when to call it. Only the returned structure/format is left unaddressed, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents r_address, signed, and response_format. The description adds no parameter-level meaning (e.g., it never explains the signed or response_format options), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (0-100 trust score) scoped to XRPL wallet addresses. The chain reference cleanly distinguishes it from the EVM and Stellar siblings without needing their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use before paying or interacting with any XRPL wallet" gives clear actionable context for invocation. It does not explicitly name the sibling alternatives (get_evm_wallet_score / get_stellar_wallet_score) or state when NOT to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
nulucre_check_service_status - First observed
nulucre_get_evm_wallet_score - First observed
nulucre_get_stellar_wallet_score - First observed
nulucre_get_xrpl_wallet_score
Related MCP Connectors
x402 payment firewall + Agent Credit Bureau. Invoice/verify/score via RLUSD on XRPL.
XRPL token rug-checks, issuer reputation & AMM data for AI agents. Pay-per-call USDC via x402.
Solana address risk grades and token scans for AI agents. Pay-per-call via x402 (USDC on Base).
Smart-contract risk reports for AI agents on 20 EVM chains, paid per call via x402 ($0.02 USDC).
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceCrypto compliance tools for AI-agent payments: screen any address for sanctions, frozen-stablecoin and hacker/mixer exposure across 8+ chains, trace fund taint, and get an allow/review/decline decision before settlement. Free keyless address checks; deeper endpoints are x402-payable.280 npmMIT
- AlicenseAqualityDmaintenanceCounterparty risk scoring for agentic commerce. Scores wallets, domains, IPs, and companies 0-100 before AI agents transact via x402 micropayments on Base13MIT
- AlicenseAqualityDmaintenanceReputation scoring for AI agent wallets on Base. 9 tools for trust scores, fraud checks, blacklist lookups, leaderboard, badge generation, and agent registration with x402 payment verification.940 npm1MIT
- AlicenseAqualityCmaintenanceProvides trust and reputation tools for AI agent wallets within the x402 payment ecosystem and ERC-8004 agent registry. It enables users to perform wallet reputation lookups, real-time risk assessments, and browse registered agents.4342 npm-
Glama MCP Gateway
Add one secure layer between your agents and this server.