Skip to main content
Glama
Quidli

Quidli Connect MCP

Official

Quidli Connect MCP

npm version npm downloads license

Open payments for multiplayer agents, powered by onchain reputation. Resolve a social handle to a wallet, check its onchain reputation, and send tokens — from Cursor, Claude Desktop, Claude Code, or any MCP-compatible client.

Multiplayer means parties who don't already know each other — an agent paying a person, or another agent, with no prior relationship and no account to fall back on. Connect is how it verifies who it's dealing with before sending anything.

Public repository: github.com/Quidli/connect-mcp

Try it in one command

No API key required.

Claude Code:

claude mcp add --transport http quidli https://mcp.connect.quid.li/

Cursor: Add to Cursor (or paste that link into Settings → MCP → Add new MCP server)

Claude Desktop: Settings → Connectors → Add custom connector, URL https://mcp.connect.quid.li

Local (any client) — runs on your machine instead of the hosted endpoint:

npx -y @quidli/connect-mcp

See Choose how to connect below for API keys, x402 wallet pay-per-call, and full config snippets.

Then ask your agent:

Resolve the GitHub handle justinquidli to a wallet.

{
  "status": "completed",
  "results": [
    {
      "type": "github",
      "value": "justinquidli",
      "ethWalletAddress": "0x6a48ADE3bE3F9f0b8B4c9af61Bb654A219311699",
      "solWalletAddress": "8vo1awED98mwqDa4qR9JyMsk7qJYiwnTSG4EnXGyWXRh"
    }
  ]
}

Resolves across GitHub, X, Telegram, Discord, LinkedIn, Farcaster, email and phone — and generates a wallet for people who have never used Quidli.

Then score what you find: connect_scores_batch returns onchain reputation for a batch of identities.

Lookup, scores, and price run without a key under a shared anonymous quota. Add a Connect API key for higher limits, your own profile (connect_me), and Smart Send.


Related MCP server: MCPAGENT

Choose how to connect

Hosted (mcp.connect.quid.li)

Local (npx @quidli/connect-mcp)

Setup

Add a URL in MCP settings

Run a local process via npx

Auth

Optional API key. Without a key: lookup/scores under a shared anonymous quota; price/chains are public

API key, x402 pay-per-call, or none for lookup/scores

Pros

No install; try without a key; always on Quidli infrastructure

Wallet private key never leaves your machine; pay per call with USDC instead of an API key

Cons

Anonymous traffic shares a global rate limit; no pay-per-call billing

Requires Node.js 20+; npx may download the package on first run

Limitations

Cannot use x402 / wallet auth — do not send a private key to the hosted endpoint

x402 mode needs USDC on Base (mainnet 8453); connect_drop requires an API key

Get a Connect API key at connect.quid.li → Enable API access for higher limits, connect_me, and Smart Send.


Zero local setup. Lookup, scores, agent, and price work without an API key (shared anonymous quota). Add a key for higher limits, your profile (connect_me), and Smart Send.

Cursor

If you already have other MCP servers: skip the deeplink and add manually — the one-click install can overwrite your entire mcp.json in some Cursor versions.

Add to Cursor

Or paste into Cursor Settings → MCP → Add new MCP server:

cursor://anysphere.cursor-deeplink/mcp/install?name=quidli-connect&config=eyJ1cmwiOiJodHRwczovL21jcC5jb25uZWN0LnF1aWQubGkifQ==

Add manually {#cursor-manual}

Merge this into ~/.cursor/mcp.json (global) or .cursor/mcp.json (project) under mcpServers — do not replace your existing entries:

"quidli-connect": {
  "url": "https://mcp.connect.quid.li"
}

Optional — higher limits and Smart Send:

"quidli-connect": {
  "url": "https://mcp.connect.quid.li",
  "headers": {
    "x-api-key": "<your-connect-api-key>"
  }
}

Claude Desktop

  1. Open Claude → Settings → Connectors (or Settings → Developer → Edit Config on older versions).

  2. Add a custom MCP connector with URL https://mcp.connect.quid.li. Optionally set header x-api-key: <your-connect-api-key>.

Or merge this into your config file and restart Claude:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "quidli-connect": {
      "url": "https://mcp.connect.quid.li"
    }
  }
}

If your Claude version does not support remote url connectors, use the local bridge instead (still hosted API, runs a small local helper):

{
  "mcpServers": {
    "quidli-connect": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "--http",
        "https://mcp.connect.quid.li"
      ]
    }
  }
}

Requires Node.js 20+ for the bridge. Restart Claude Desktop after saving. You should see a hammer icon in the chat input when tools are available.

Without a key, initialize / tools/list always succeed. Anonymous tools/call share a global quota (HTTP 429 when exceeded — get a key for higher limits). Placeholder keys still return 401.


Grok

  1. Go to grok.com/connectors and select Custom.

  2. Enter the server URL: https://mcp.connect.quid.li

This gives Grok access to the anonymous-tier tools -- lookup, scores, agent, and price -- under the shared quota.

Current limitation: Grok's custom connector UI does not currently support attaching an API key or custom header. That means connect_me, connect_drop, and connect_drop_balance (all API key only) are not usable through Grok yet -- calls to them will return an unauthorized error. This isn't a connect-mcp limitation; it's Grok's custom-connector setup not exposing an auth field at this time.


Smithery

If you already use Smithery, it will handle auth and sessions for you. Requires a Smithery account.

npx smithery login
npx smithery mcp add quidli/connect

Local (stdio)

Best if you want pay-per-call with a wallet, or prefer credentials in a local env file.

Requires Node.js 20+.

Cursor

Add one of the following to .cursor/mcp.json (project) or your global MCP settings.

Option A — API key

Same billing model as hosted; credentials stay on your machine.

{
  "mcpServers": {
    "quidli-connect": {
      "command": "npx",
      "args": ["-y", "@quidli/connect-mcp"],
      "env": {
        "CONNECT_API_KEY": "<your-connect-api-key>",
        "CONNECT_API_BASE_URL": "https://api.connect.quid.li"
      }
    }
  }
}

Option B — x402 pay-per-call (wallet)

No API key. Authenticated calls pay automatically when the API returns HTTP 402. Your wallet private key is only read by the local process.

{
  "mcpServers": {
    "quidli-connect": {
      "command": "npx",
      "args": ["-y", "@quidli/connect-mcp"],
      "env": {
        "EVM_PRIVATE_KEY": "0x<wallet-with-usdc-on-base>",
        "CONNECT_API_BASE_URL": "https://api.connect.quid.li",
        "CONNECT_X402_EVM_NETWORK": "8453"
      }
    }
  }
}

Use 84532 for Base Sepolia when pointing at a staging API.

Option C — no credentials (lookup / scores)

The MCP process starts without CONNECT_API_KEY or EVM_PRIVATE_KEY. connect_lookup, connect_scores_*, connect_get_price, and connect_get_chains call the API without auth. That succeeds when x402 is disabled (price 0, typical for local). On production with x402 enabled, those tools return HTTP 402 until you set a key or wallet.

connect_me, connect_drop, and connect_drop_balance still require CONNECT_API_KEY.

{
  "mcpServers": {
    "quidli-connect": {
      "command": "npx",
      "args": ["-y", "@quidli/connect-mcp"],
      "env": {
        "CONNECT_API_BASE_URL": "http://127.0.0.1:3011"
      }
    }
  }
}

Claude Desktop

  1. Open Claude → Settings → Developer → Edit Config (enable Developer mode first if you do not see it).

  2. Merge one of the blocks below into mcpServers in:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  1. Restart Claude Desktop.

Option A — API key

{
  "mcpServers": {
    "quidli-connect": {
      "command": "npx",
      "args": ["-y", "@quidli/connect-mcp"],
      "env": {
        "CONNECT_API_KEY": "<your-connect-api-key>",
        "CONNECT_API_BASE_URL": "https://api.connect.quid.li"
      }
    }
  }
}

Option B — x402 pay-per-call (wallet)

{
  "mcpServers": {
    "quidli-connect": {
      "command": "npx",
      "args": ["-y", "@quidli/connect-mcp"],
      "env": {
        "EVM_PRIVATE_KEY": "0x<wallet-with-usdc-on-base>",
        "CONNECT_API_BASE_URL": "https://api.connect.quid.li",
        "CONNECT_X402_EVM_NETWORK": "8453"
      }
    }
  }
}

If both CONNECT_API_KEY and EVM_PRIVATE_KEY are set, the API key is used.

Credentials are optional in local mode. Without either variable, lookup/scores still work when the API does not charge x402. connect_me and Smart Send tools require CONNECT_API_KEY.


Troubleshooting

npx hangs with no output when run from a background service

If you're launching @quidli/connect-mcp via npx from inside a background process manager -- a macOS launchd agent, a systemd unit, a supervisor, or any client config running without a normal interactive shell -- it can hang indefinitely with zero output and no error. This isn't a crash; npx is stuck resolving PATH in an environment that doesn't provide the same shell initialization an interactive terminal gets.

Workaround: if you have Bun installed, use bunx instead of npx. It performs the same job -- running the package without a local install -- but doesn't hit this hang in restricted-PATH environments.

{
  "mcpServers": {
    "quidli-connect": {
      "command": "bunx",
      "args": ["-y", "@quidli/connect-mcp"],
      "env": {
        "CONNECT_API_KEY": "your-api-key"
      }
    }
  }
}

If you're spawning the process yourself (rather than through a client's MCP config) and want to be resilient to bunx not being on PATH either, resolve it by absolute path first:

import { spawn } from "node:child_process";
import { existsSync } from "node:fs";
import { homedir } from "node:os";
import { join } from "node:path";

const BUNX_PATH = (() => {
  const candidate = join(homedir(), ".bun", "bin", "bunx");
  return existsSync(candidate) ? candidate : "bunx";
})();

const proc = spawn(BUNX_PATH, ["-y", "@quidli/connect-mcp"], {
  stdio: ["pipe", "pipe", "pipe"],
});

This isn't a general claim that Bun is better than npm -- it's a targeted fix for one specific, reproducible failure mode when npx is spawned outside an interactive shell.

Wrong environment variable name for the API key

Double-check you're setting CONNECT_API_KEY, not API_KEY -- the server only reads CONNECT_API_KEY, and a mismatch here fails silently: your calls will run in anonymous/unauthenticated mode instead of erroring, which can look like a working-but-oddly-limited connection rather than a config mistake.

Supported chains

connect_get_chains (REST: GET /chains) is the source of truth and needs no key. As of 2026-10-14 it lists these mainnets, each with lookup and drop enabled:

Chain

Chain ID

Native token

Ethereum

1

ETH

Base

8453

ETH

Polygon

137

POL

OP Mainnet

10

ETH

Arbitrum One

42161

ETH

Avalanche

43114

AVAX

World Chain

480

ETH

Monad

143

MON

Robinhood Chain

4663

ETH

Solana

1399811149

SOL

World Chain Sepolia (4801) is also listed, as a testnet.

  • Social handles resolve on every chain: EVM chains pay the recipient's ethWalletAddress, Solana pays their solWalletAddress.

  • connect_drop sends native tokens when tokenContract is omitted. For an ERC-20 or SPL token you pass its contract address or mint.

  • Balance coverage depends on the chain. connect_drop_balance returns the native balance everywhere. ERC-20 balances come from a per-chain provider: Moralis on Monad and Base, Blockscout on Robinhood Chain, and other chains may return only native plus featured tokens. Zero balances are omitted, spam tokens can appear, and a token the provider doesn't index can be missing. If you know its contract address you can still send it by passing tokenContract.

Tools

Tool

What it does

connect_get_price

List reference prices (no auth)

connect_get_chains

List supported chains and feature compatibility (no auth)

connect_lookup

Resolve social identities to EVM and SOL wallet addresses

connect_lookup_exposed

List platforms a recipient has exposed on Connect

connect_scores_batch

Batch scores for accounts or usernames

connect_scores_by_account

Scores for one linked account

connect_scores_by_username

Scores by Connect username

connect_me

API key owner profile, scores, and linked accounts — API key only

connect_drop

Smart Send (EVM batch or Solana SOL/SPL); accepts trustFilter to gate recipients by trust graph — API key only

connect_drop_balance

Smart Send wallet balances on a chain — API key only. Token coverage varies by chain, see Supported chains

connect_trust_create

Create an on-chain trust attestation (EAS on Base) — API key only

connect_trust_check

Check whether identities sit in a trust graph at depth 1

connect_trust_graph

List outgoing/incoming trust edges for an identity

connect_trust_revoke

Revoke active trust attestations by target — API key only

Ask your client to use these tools when you need Connect data or actions.

Contributing

This repository is a read-only mirror, regenerated on every release — changes committed here are overwritten. Please open an issue rather than a pull request. See CONTRIBUTING.md.

Available Tools

14 tools
connect_dropSend Tokens (Smart Send)A
DestructiveIdempotent
Inspect

Execute a Smart Send from the API key owner Connect embedded wallet. EVM: batch native or ERC-20 (need native gas plus the token). Solana (chainId 1399811149): SOL or SPL from the Solana embedded wallet; packs up to 20 native or 10 SPL recipients per transaction. Social recipient types: email, phone, telegram, discord, farcaster, twitter, github (id or username). linkedin and slack are not on /drop — use connect_lookup first, then type wallet. After connect_lookup, EVM payouts use ethWalletAddress (never solWalletAddress); Solana payouts use solWalletAddress (never ethWalletAddress). Social types on /drop resolve server-side; for type wallet, pass the resolved payout address for the target chain. Omit tokenContract or set it to null for the native token; pass an ERC-20 contract or SPL mint otherwise — do not use the zero address. Amounts are smallest-unit integer strings (ETH 18 decimals, SOL 9, USDC usually 6). Solana native (tokenContract null): no ATA. Sending to a recipient without an existing funded account requires amount ≥ 890880 lamports (rent-exempt minimum for a system account); that SOL stays with the recipient. Below that the tx fails. Sender also pays a ~5000-lamport fee. Solana SPL: tokens sit in Associated Token Accounts (ATA), not on the wallet pubkey. Recipients need not already hold the token — the API prepends CreateIdempotent. The sender (not the recipient) pays ~2039280 lamports (~0.002039 SOL) rent per newly created dest ATA, plus tx fees, on top of the token amount (which can be as small as 1 unit). A 400 "Insufficient funds" on SPL is often missing SOL for ATA rent, not missing USDC. Token-2022 is not supported; USDC mint is EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v. Always call connect_drop_balance first. Returns 201 when submitted or 202 when recipients still processing — retry with the same idempotencyKey.

NameRequiredDescriptionDefault
chainIdYesEVM chain ID or 1399811149 for Solana mainnet
recipientsYesWallet or social recipients (all wallet or all social, no mix). Social types: email, phone, telegram, discord, farcaster, twitter, github (numeric id or username). linkedin and slack are not supported — use connect_lookup first, then type wallet. Optional amountInWei per recipient uses the same smallest-unit rules as amountInWeiPerRecipient. On EVM, wallet ids are 0x addresses; on Solana, base58 pubkeys. Social lookup payouts use ethWalletAddress on EVM and solWalletAddress on Solana.
trustFilterNoKeep only recipients in the sender EAS trust graph.
tokenContractNoEVM ERC-20 contract or Solana SPL mint. Omit or null for the native token (ETH/POL/AVAX, or SOL on 1399811149). Do not use the zero address.
idempotencyKeyYes
ignoreFailedRecipientsNoWhen true, send to recipients that resolved successfully and skip failed lookups.
amountInWeiPerRecipientNoUniform amount in smallest units. Native ETH uses 18 decimals; SOL uses 9; ERC-20/SPL uses token decimals from connect_drop_balance (USDC usually 6). Omit when setting amountInWei on each recipient.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: per-chain gas/rent economics (890880 lamports rent-exempt minimum, ~2039280 lamports ATA rent paid by sender), ATA creation via CreateIdempotent, the cryptic 400 'Insufficient funds' meaning, and the 201/202 return-and-retry-with-same-idempotencyKey behavior. This is exactly the destructive/irreversible detail an agent needs.

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

Conciseness3/5

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

It is front-loaded with the action, but the body is a dense run-on that repeats schema content ('Omit tokenContract or set it to null', 'do not use the zero address') and cycles back through rent/fee details. Much of it earns its place, but structure and trimming are lacking.

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 complex, destructive, multi-chain, 7-parameter tool with nested recipients, the description covers recipient types, mixed-wallet constraints, amounts, rent/fee edge cases, error interpretation, and return codes. Nothing essential to correct invocation is missing.

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 high (86%), so the baseline is 3, but the description adds real meaning: omit/null tokenContract for native, smallest-unit amounts per chain (ETH 18, SOL 9, USDC 6), and the ethWalletAddress vs solWalletAddress routing rule after connect_lookup. It clarifies semantics the schema alone does not.

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?

Opens with a specific verb+resource+scope: 'Execute a Smart Send from the API key owner Connect embedded wallet.' It further disambiguates from siblings by naming connect_lookup and connect_drop_balance and describing chain/recipient handling, so an agent can distinguish it immediately.

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?

Gives explicit routing rules ('Always call connect_drop_balance first', and for linkedin/slack 'use connect_lookup first, then type wallet'), which is clear context for use. It lacks a general when-not-to-use statement or comparison against other transfer tools, so it falls short of the 5 bar.

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

connect_drop_balanceCheck Smart Send BalanceA
Read-onlyIdempotent
Inspect

Get native and token balances for the API key owner embedded wallet. Accepts Smart Send chains and enabled delegation chains. Robinhood Chain (4663) returns ERC-20 balances from Blockscout. Monad (143) returns ERC-20 balances from Moralis; other delegation chains return native plus featured tokens. Always call before connect_drop. Zero balances are omitted, so a missing token means balance 0. EVM: confirm native gas plus the ERC-20 being sent. Solana (chainId 1399811149): SOL in this response is spendable lamports on the wallet pubkey (rent locked in existing token accounts is not included). Native SOL drop to a recipient without an existing funded account: amount itself must be ≥ 890880 lamports and sender SOL must cover amount + ~5000 lamports fee. SPL drop: token balance ≥ total amount, and SOL ≥ tx fee + ~2039280 lamports (~0.002039 SOL) per recipient that may need a new Associated Token Account — even when sending USDC. Insufficient SOL for ATA rent fails before the token transfer.

NameRequiredDescriptionDefault
chainIdYesEVM chain ID or 1399811149 for Solana mainnet (Smart Send)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description still layers on substantial behavior: zero balances are omitted, per-chain data sources (Blockscout for 4663, Moralis for 143), Solana lamport/rent semantics, and pre-failure conditions for ATA rent. This is exactly the extra context annotations cannot carry.

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?

Purpose and the connect_drop prerequisite are front-loaded, and each subsequent sentence carries chain-specific operational detail rather than filler. It is dense and long for a one-parameter tool, but the Solana rent/fee figures are decision-relevant rather than padding.

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?

With no output schema, the description correctly explains the return semantics (omitted zero balances, per-chain token sourcing) as well as the preconditions for a successful downstream drop. An agent has enough to both interpret the result and decide whether a send can proceed.

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% for the single chainId param, so baseline is 3, but the description adds real meaning beyond the schema: it documents special behavior for chainId 4663, 143, and 1399811149 that the schema's one-line description does not convey.

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 and resource ('Get native and token balances for the API key owner embedded wallet') and scopes it further by naming which chains are accepted. It also explicitly positions itself relative to the connect_drop sibling via 'Always call before connect_drop', so an agent can distinguish intent 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 Guidelines4/5

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

Gives a clear when-to-use directive ('Always call before connect_drop') and states the accepted chain classes. It does not name any when-not condition or an alternative tool for balances outside Smart Send/delegation chains, so it stops short of full routing guidance.

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

connect_get_chainsList Supported ChainsA
Read-onlyIdempotent
Inspect

List product chains with per-feature compatibility. lookup is true for EVM catalog chains and Solana; drop is true for Smart Send chains, enabled delegation chains, and Solana (chainId 1399811149 for connect_drop / connect_drop_balance).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description earns credit by explaining the meaning of the returned compatibility flags and the special Solana identifier. It still says nothing about return shape or ordering, which a no-output-schema tool would benefit from.

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?

Two dense sentences, front-loaded with what the tool lists before the flag semantics, with no filler. The parenthetical chainId detail is compact, though the second sentence is information-packed enough to border on terse.

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?

With no input parameters and no output schema, the description carries the burden of explaining the return values and does so for the two named flags (lookup, drop). 'Per-feature compatibility' implies additional feature flags that are never enumerated, leaving a small gap.

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, so there is nothing for the description to document and the baseline is 4. No parameter-related gaps exist.

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?

States a specific verb and resource ('List product chains') plus the distinguishing attribute ('with per-feature compatibility'). An agent can tell this apart from the connect_lookup/connect_drop siblings by topic, though the description never explicitly contrasts itself with them.

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?

Usage is implied rather than stated: describing which flags are true for which chain types and noting the Solana chainId for connect_drop/connect_drop_balance hints this is a pre-flight capability check. There is no explicit 'use this when…' or 'do not use for…' guidance, so the agent must infer the workflow.

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

connect_get_priceGet x402 PricesA
Read-onlyIdempotent
Inspect

Get public x402 list prices for lookup and scores (reference only; live paywall amounts are in 402 responses).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds non-obvious context that these are reference prices that may diverge from live paywall amounts, which is exactly the kind of semantic caveat annotations cannot express. It does not describe the return shape, but annotations carry most of the burden.

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?

A single sentence that front-loads the core action and folds the caveat into a compact parenthetical. Every clause earns its place with no padding.

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 zero-parameter, non-destructive read with no output schema, the description covers purpose and the key semantic caveat about reference vs live prices. It could add a note on whether the list is global or scoped, but nothing essential to invoking it correctly is missing.

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, so the baseline is 4 and there is nothing for the description to clarify or omit. No parameter-level confusion is possible.

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?

States a specific verb+resource: 'Get public x402 list prices for lookup and scores.' That is clearly distinct from data-oriented siblings like connect_lookup, connect_scores_batch, and connect_trust_graph. It stops short of a 5 because 'x402' is domain jargon an agent may not resolve, and no sibling is named for contrast.

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 parenthetical 'reference only; live paywall amounts are in 402 responses' gives real routing guidance: use this for list/reference pricing, not for live paywall amounts. It stops short of a 5 because it does not name the alternative tool or endpoint that supplies live amounts.

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

connect_lookupResolve Handle to WalletA
Read-onlyIdempotent
Inspect

Resolve social identities to EVM and Solana wallet addresses. Resolving a recipient who has no wallet provisions one for them, so this is read-only for the caller but not for the recipient. If status is processing, retry the same payload.

NameRequiredDescriptionDefault
recipientsYesRecipients to resolve to EVM/Solana wallets

TDQS

A4.2/5.0
Behavior5/5

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

Explicitly discloses a hidden side effect: resolving a recipient without a wallet provisions one, so the operation is read-only for the caller but not the recipient. This directly pre-empts the readOnlyHint=true annotation and tells the agent about state mutation on the other party, which annotations alone conceal. Retry-on-processing semantics add further behavioral value.

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 tight sentences with zero filler, front-loaded with the core purpose followed by the critical side-effect caveat and the retry rule. 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?

Given no output schema, the description should explain what comes back. It hints at a status field ('processing') but never describes the returned wallet/status shape, leaving a small gap. The mutation caveat and retry rule cover the highest-risk unknowns for this one-parameter tool.

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 schema already documents the recipients array and its fields. The description adds only a conceptual gloss ('social identities') without syntax or format detail, 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?

States a specific verb (resolve) and resource (social identities → EVM/Solana wallet addresses), so the agent immediately knows what it does. It is clearly distinguishable from generic lookup siblings, though it never names connect_lookup_exposed, which is the closest relative.

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?

Gives one concrete operational rule — 'if status is processing, retry the same payload' — which is useful invocation guidance. However, it never states when to choose this over connect_lookup_exposed or any other sibling, and no exclusions are given, so usage is only partially addressed.

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

connect_lookup_exposedList Exposed AccountsA
Read-onlyIdempotent
Inspect

List platforms a recipient has exposed on Connect, with enriched profile, scores, and wallet addresses. Recipient may be a social account, an exposed wallet (EVM/Solana/smart wallet), or a Connect username. May require x402 payment when the profile owner charges for lookups.

NameRequiredDescriptionDefault
recipientYesSocial identity, exposed wallet (EVM/Solana/smart wallet), or Connect username whose exposed linked accounts and Connect profile should be listed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description adds real behavioral context beyond that: it discloses the return payload shape (enriched profile, scores, wallet addresses) and an unusual runtime condition — a possible x402 charge when the profile owner monetizes lookups.

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 compact sentences with the resource and return contents front-loaded, then the recipient variants, then the payment caveat. No filler, though the recipient-type sentence partially duplicates the schema description.

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?

No output schema exists, so the description does the work of naming the returned data (platforms, profile, scores, wallet addresses), and it flags the payment condition. It is adequate for an idempotent read tool; the missing piece is how the payment requirement surfaces or how to satisfy it.

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 the nested recipient object is already documented with its enum of types, including wallets and usernames. The description mirrors that ('social account, an exposed wallet (EVM/Solana/smart wallet), or a Connect username') without adding id format, required-vs-optional rules for id/username, or examples, so it clears the baseline but no more.

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?

States a specific verb and resource ('List platforms a recipient has exposed on Connect') and enumerates what's returned (profile, scores, wallet addresses), which separates it from a plain lookup. It never names the sibling connect_lookup, so the boundary between this and the non-exposed lookup is left to inference.

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 explains what kinds of recipients are accepted (social account, exposed wallet, Connect username) and warns that x402 payment may be required, which is genuinely useful context. However, it never says when to prefer this over connect_lookup or connect_scores_by_account, nor what to do if payment is required.

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

connect_meGet My Connect ProfileA
Read-onlyIdempotent
Inspect

Get the Connect profile, scores, and all linked accounts for the API key owner. Use to identify which user the key belongs to.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds value beyond them by disclosing the return payload (profile, scores, linked accounts), which matters because there is no output schema. It says nothing about rate limits or auth prerequisites, keeping it under a 5.

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 short sentences, the payload statement front-loaded and the routing hint second. Every clause earns its place with no 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?

With no output schema, the description carries the burden of describing returns, and it does so at a summary level (profile, scores, linked accounts). Annotations cover the behavioral profile. The only gap is that it does not sketch the shape of 'linked accounts' or 'scores', so it is complete enough to select and call but not to anticipate the response.

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, which is the baseline-4 case. The description reinforces this implicitly by scoping the result to 'the API key owner' rather than accepting identifiers, so the parameterless contract is unambiguous.

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 and resource ('Get the Connect profile') plus exactly what is included (scores, linked accounts) and whose data it is (the API key owner). This scope — key-owner's own identity, zero parameters — cleanly separates it from siblings like connect_scores_by_account, connect_scores_by_username, and connect_trust_graph.

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?

'Use to identify which user the key belongs to' gives a clear trigger condition for calling the tool. It does not name alternatives or state when NOT to use it (e.g., when you already have a username and should use connect_scores_by_username instead), so it stops short of the top tier.

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

connect_scores_batchScore Identities (Batch)A
Read-onlyIdempotent
Inspect

Batch scores for linked accounts or Connect usernames. One result per request user. Optional filter sets passedFilter (quidli 0–100, neynar/lens 0–1, ethos 0–2800).

NameRequiredDescriptionDefault
usersYesUsers to fetch scores for
filterNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: result cardinality ('one result per request user') and what the optional filter actually accomplishes ('sets passedFilter'), which is not derivable from the annotations. It stops short of describing failure behavior for unresolvable users.

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 short sentences, no filler, and the core capability is front-loaded ahead of the optional filter detail. The parenthetical score ranges are the only element that arguably duplicates the schema and could be dropped.

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?

With no output schema and a nested two-param input, the description carries more burden than it meets. It hints at output shape via 'one result per request user' and explains the filter's effect, but omits what a score result contains, batch-size limits, and how partial failures or unknown identifiers are handled.

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 50% and the enum/range details for minScore are already in the schema, so the description's restatement of the 0–100 / 0–1 / 0–2800 bands is largely redundant. Its one genuine addition is explaining that the filter produces a passedFilter flag, but it says nothing about the users array's id/type/username shape or how 'linked accounts vs Connect usernames' maps onto the type enum.

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?

States a specific verb and resource (batch scores) plus the scope ('linked accounts or Connect usernames') and cardinality ('one result per request user'). The word 'Batch' in the name and 'one result per request user' imply it handles multiple identities, but the description never names the singular siblings connect_scores_by_account / connect_scores_by_username to make the routing decision explicit.

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?

Usage is only implied: the batching semantics suggest this is the multi-user path, but there is no explicit 'use this when you have many users, use connect_scores_by_username for one' guidance. No prerequisites, no limits on batch size, no exclusions.

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

connect_scores_by_accountScore a Linked AccountC
Read-onlyIdempotent
Inspect

Scores for a linked social account or wallet.

NameRequiredDescriptionDefault
platformYes
identifierYes

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no indication of what a score represents, its range, rate limits, or what happens when an account is not found.

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

Conciseness2/5

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

It is short, but it is a verbless sentence fragment rather than a front-loaded action statement, so its brevity reflects under-specification rather than efficiency. No sentence here explains what the tool actually returns or does.

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

Completeness2/5

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

For a two-parameter, enum-driven lookup with no output schema and an open-world annotation, the description leaves the agent guessing at identifier format, score semantics, and how to choose between this and the sibling score tools. The annotations carry the safety story, but the functional context is essentially absent.

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

Parameters2/5

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

Schema description coverage is 0% and the description only loosely hints that 'identifier' is an account or wallet. It does not explain the ten-value platform enum, nor the expected identifier format (e.g., handle without '@', bare address, E.164 phone), which the schema leaves entirely undocumented.

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

Purpose3/5

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

The fragment 'Scores for a linked social account or wallet' names the resource (account/wallet) but never states the action or what 'scores' means — a reputation score, a numeric rating, a risk score? It only faintly distinguishes from connect_scores_by_username (account vs username) and says nothing about how it differs from connect_scores_batch.

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?

There is no when-to-use guidance, no mention of the alternative siblings (connect_scores_by_username, connect_scores_batch), and no prerequisites such as whether the account must already be linked. The agent must infer everything from the tool name.

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

connect_scores_by_usernameScore a Connect UsernameC
Read-onlyIdempotent
Inspect

Scores by Connect public username.

NameRequiredDescriptionDefault
usernameYes

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully structured. The description adds nothing beyond this — no disclosure of lookup failure behavior, rate limits, or whether the username must be an existing public handle. For a tool whose annotations carry the safety story, it contributes no extra 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.

Conciseness3/5

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

A single short sentence fragment with no wasted words, so it is concise and front-loaded. However, the terseness tips into under-specification for a sibling set this large, so brevity here is not fully earned.

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

Completeness2/5

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

The tool is simple (one required parameter) and annotations cover its safety profile, which lowers the bar. Still, the description offers no information on the return value, error/not-found behavior, or how it relates to the batch and by-account variants, leaving real gaps for correct selection.

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 0%, and the schema only specifies a string with minLength 1. The description does add some meaning by clarifying the parameter is a 'Connect public username' rather than an account ID, hinting at the expected identifier domain. But it leaves format and validity requirements undocumented.

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

Purpose3/5

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

The description pairs a verb ('Scores') with a resource ('Connect public username'), which loosely signals a scoring lookup. However, 'Scores' is ambiguous about what is being scored or returned, and the phrasing largely restates the tool name connect_scores_by_username. It only weakly differentiates from siblings like connect_scores_by_account or connect_scores_batch.

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?

There is no guidance on when to use this tool versus connect_scores_by_account, connect_scores_batch, or connect_lookup. The agent must infer the choice purely from the tool name and the single parameter. No prerequisites or exclusions are stated.

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

connect_trust_checkCheck TrustB
Read-onlyIdempotent
Inspect

Check whether identities sit in a trust graph at depth 1. Omit context to match any context.

NameRequiredDescriptionDefault
fromYesGraph owner
contextNoIf set, only this context matches
targetsYesIdentities to test

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare this as a read-only, idempotent, open-world, non-destructive operation. The description adds the important constraint that results are limited to depth 1 and explains context matching behavior, but it does not describe return values or failure behavior.

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 short sentences with no wasted words. The core purpose is front-loaded and the context-omission rule follows immediately.

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?

For a tool with nested objects and no output schema, the description is adequate but incomplete. It does not explain the return shape or result format, though the annotations and fully described schema cover most invocation needs.

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 most parameter meaning comes from structured fields. The description adds meaningful semantics for the optional context parameter by clarifying that omitting it matches any context, which resolves a likely ambiguity beyond the schema text.

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 states a specific verb and resource: checking whether identities are in a trust graph at depth 1. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as connect_trust_graph or connect_lookup.

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 only guidance is 'Omit context to match any context,' which explains a parameter default rather than when to choose this tool over alternatives. There is no explicit when-to-use or when-not-to-use guidance.

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

connect_trust_createCreate Trust AttestationA
DestructiveIdempotent
Inspect

Create a unidirectional trust attestation on Base (EAS) from the API key owner embedded wallet to a wallet or social identity. Identical active attestations are returned without a new transaction. Requires CONNECT_API_KEY, Smart Send attestation signer enrolled, and ETH on Base for gas.

NameRequiredDescriptionDefault
toYesIdentity to trust (wallet, social, or Connect username)
levelYesTrust level 1–100
contextNoOptional context such as team:quidli
expiresInNoOptional lifetime in seconds

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=true, idempotent=true, openWorld=true. The description adds real value beyond these: it explains the no-op dedup path, the auth/enrollment prerequisites, and that gas is required on Base. It does not clarify what 'destructive' means for this tool (on-chain spend, non-reversible attestation), leaving a small gap.

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 tight sentences: what it does, the dedup edge case, then prerequisites last. No filler, and the core action 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?

For a no-output-schema, nested-object mutation tool, it covers auth, gas, and idempotent behavior well. It omits what a successful response contains and the effect of expiresIn timing, which an agent might want, but nothing critical is missing.

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 all four parameters are documented there (to/level/context/expiresIn with ranges). The description only reinforces that the target may be a wallet or social identity, which the nested schema already says, so it adds little beyond 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 names a specific verb (Create), resource (unidirectional trust attestation), chain/standard (Base, EAS), and the source/target of the attestation. This clearly separates it from siblings like connect_trust_revoke, connect_trust_check, and connect_trust_graph.

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 the operational preconditions explicitly (CONNECT_API_KEY, Smart Send attestation signer enrolled, ETH on Base for gas) and states dedup behavior when an identical attestation exists. It does not explicitly contrast when to prefer this over connect_trust_revoke or connect_trust_check, so it falls 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.

connect_trust_graphList Trust EdgesB
Read-onlyIdempotent
Inspect

List outgoing or incoming trust edges for an identity at depth 1.

NameRequiredDescriptionDefault
contextNo
platformYesIdentity platform, or username for a Connect username
directionNoout = who they trust (default); in = who trusts them
identifierYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds the important 'depth 1' traversal limit and clarifies outgoing vs incoming semantics, but omits return format, pagination, authentication needs, or rate limits.

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 front-loaded sentence with no wasted words. The scope constraint is stated immediately.

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 tool is simple and annotations cover safety, but there is no output schema and the description does not explain what a trust edge result looks like, whether results are paginated, or any limits. It is minimally adequate but leaves return-value semantics to inference.

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 50%: platform and direction have schema descriptions, while context and identifier do not. The description's 'outgoing or incoming' maps to direction and 'identity' loosely covers platform/identifier, but it adds little beyond the schema and does not compensate for the undocumented context parameter.

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 states a specific verb (List), resource (trust edges), and scope (outgoing or incoming for an identity at depth 1). It is clear what the tool does, though it does not distinguish itself from siblings like connect_trust_check or connect_lookup.

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 no guidance on when to use this tool versus alternatives such as connect_trust_check or connect_trust_create. Usage is only implied from the verb and resource.

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

connect_trust_revokeRevoke Trust AttestationA
DestructiveIdempotent
Inspect

Revoke active trust attestations from the API key owner to a target. Optional context limits which attestations are revoked. Requires CONNECT_API_KEY and ETH on Base.

NameRequiredDescriptionDefault
toYesIdentity to untrust
contextNoRevoke only this context. Omit to revoke all contexts for the pair.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds real context beyond that: the auth requirement (CONNECT_API_KEY) and the on-chain gas requirement (ETH on Base), which signals this is a real transaction with cost, plus the scoping semantics of the context parameter. It stops short of saying whether revocation is reversible or what happens to the underlying attestation.

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 short sentences, front-loaded with the core action, then scoping, then prerequisites. Every sentence carries information, though the context-scoping sentence duplicates what the schema already states, which is the only minor waste.

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 destructive, on-chain mutation tool with no output schema, the description covers action, direction, scoping, and both auth/gas prerequisites. Missing only edge behavior (no-op when nothing to revoke, reversibility), which the idempotentHint partially covers. Adequate for correct invocation.

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 the schema already documents both the `to` identity object and the `context` parameter verbatim ('Revoke only this context. Omit to revoke all contexts for the pair.'). The description largely restates that context scoping, adding only the phrase 'for the pair' framing. Baseline 3 applies when the schema carries the load.

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 (revoke), resource (active trust attestations), direction (from the API key owner to a target), and the optional scoping parameter. An agent can immediately distinguish this from connect_trust_create, connect_trust_check, and connect_trust_graph 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.

Usage Guidelines3/5

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

The description implies the when (undo an existing trust relationship) and gives prerequisites (CONNECT_API_KEY, ETH on Base), but never explicitly names an alternative or a when-not condition. No guidance on what happens if no matching attestation exists, or how it relates to connect_trust_check for verification first.

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. 11 tool updatesv0.5.2
    • Removedconnect_agent_prompt
    • Changedconnect_drop7 fields changed
      • addedInput schema / properties / amountInWeiPerRecipient / description
        Added value: +"Uniform amount in smallest units. Native ETH uses 18 decimals; SOL uses 9; ERC-20/SPL uses token decimals from connect_drop_balance (USDC usually 6). Omit when setting amountInWei on each recipient."
      • addedInput schema / properties / chainId / description
        Added value: +"EVM chain ID or 1399811149 for Solana mainnet"
      • addedInput schema / properties / ignoreFailedRecipients / description
        Added value: +"When true, send to recipients that resolved successfully and skip failed lookups."
      • addedInput schema / properties / recipients / description
        Added value: +"Wallet or social recipients (all wallet or all social, no mix). Social types: email, phone, telegram, discord, farcaster, twitter, github (numeric id or username). linkedin and slack are not supported — use connect_lookup first, then type wallet. Optional amountInWei per recipient uses the same smallest-unit rules as amountInWeiPerRecipient. On EVM, wallet ids are 0x addresses; on Solana, base58 pubkeys. Social lookup payouts use ethWalletAddress on EVM and solWalletAddress on Solana."
      • changedInput schema / properties / recipients / items / properties / type / enum
        Previous value: -[
        -  "email",
        -  "phone",
        -  "telegram",
        -  "discord",
        -  "farcaster",
        -  "twitter",
        -  "github",
        -  "linkedin",
        -  "slack",
        -  "wallet",
        -  "username"
        -]New value: +[
        +  "email",
        +  "phone",
        +  "telegram",
        +  "discord",
        +  "farcaster",
        +  "twitter",
        +  "github",
        +  "wallet"
        +]
      • addedInput schema / properties / tokenContract / description
        Added value: +"EVM ERC-20 contract or Solana SPL mint. Omit or null for the native token (ETH/POL/AVAX, or SOL on 1399811149). Do not use the zero address."
      • addedInput schema / properties / trustFilter
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Keep only recipients in the sender EAS trust graph.",
        +  "properties": {
        +    "context": {
        +      "description": "Restrict to this trust context. Omit to match any.",
        +      "type": "string"
        +    },
        +    "mode": {
        +      "description": "require = fail if anyone is outside the graph; skip = drop them",
        +      "enum": [
        +        "require",
        +        "skip"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "mode"
        +  ],
        +  "type": "object"
        +}
    • Changedconnect_drop_balance1 field changed
      • changedInput schema / properties / chainId / description
        Previous value: -"EVM chain ID (Smart Send supported chains only)"New value: +"EVM chain ID or 1399811149 for Solana mainnet (Smart Send)"
    • Addedconnect_get_chains
    • Changedconnect_lookup1 field changed
      • changedInput schema / properties / recipients / items / properties / type / enum
        Previous value: -[
        -  "email",
        -  "phone",
        -  "telegram",
        -  "discord",
        -  "farcaster",
        -  "twitter",
        -  "github",
        -  "linkedin",
        -  "slack",
        -  "wallet",
        -  "username"
        -]New value: +[
        +  "email",
        +  "phone",
        +  "telegram",
        +  "discord",
        +  "farcaster",
        +  "twitter",
        +  "github",
        +  "linkedin",
        +  "slack"
        +]
    • Changedconnect_lookup_exposed1 field changed
      • changedInput schema / properties / recipient / description
        Previous value: -"Recipient whose exposed linked accounts and Connect profile should be listed"New value: +"Social identity, exposed wallet (EVM/Solana/smart wallet), or Connect username whose exposed linked accounts and Connect profile should be listed"
    • Changedconnect_scores_batch1 field changed
      • addedInput schema / properties / filter / properties / minScore / description
        Added value: +"quidli_score: 0–100; neynar/lens: 0–1; ethos_twitter/wallet: 0–2800"
    • Addedconnect_trust_check
    • Addedconnect_trust_create
    • Addedconnect_trust_graph
    • Addedconnect_trust_revoke
  2. 10 tool updatesv0.5.1
    • First observedconnect_agent_prompt
    • First observedconnect_drop
    • First observedconnect_drop_balance
    • First observedconnect_get_price
    • First observedconnect_lookup
    • First observedconnect_lookup_exposed
    • First observedconnect_me
    • First observedconnect_scores_batch
    • First observedconnect_scores_by_account
    • First observedconnect_scores_by_username

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation3/5

Several clusters overlap: connect_scores_batch covers both linked accounts and usernames, making connect_scores_by_username and connect_scores_by_account largely redundant; connect_lookup and connect_lookup_exposed both return wallet/profile data; and connect_trust_graph and connect_trust_check both query depth-1 trust. Descriptions clarify inputs and outputs, but an agent could still misselect within these clusters.

Naming Consistency4/5

All tools use a consistent connect_ prefix and snake_case, with mostly predictable domain/action names such as connect_trust_create and connect_drop_balance. Minor deviations like connect_me and connect_lookup_exposed are readable but slightly less formulaic than the rest.

Tool Count4/5

14 tools fit the multi-feature scope of identity lookup, scores, trust, and drops without becoming overwhelming. A few score and trust query variants could be consolidated, but the count is reasonable for the surface area.

Completeness4/5

Core workflows are covered: lookup/profile, scores, trust graph and attestations, chain metadata, balances, and drops. Minor gaps exist around managing linked accounts or checking delayed drop status, but agents can work around them via retries and existing lookups.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI tools to interact with the Lens Protocol decentralized social network ecosystem. Supports fetching profiles, posts, followers, searching content, and accessing social graph data through standardized MCP interfaces.
    4
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to interact with AgentGram, the social network for AI agents, through native MCP tools for posting, commenting, voting, and managing identity.
    22
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a trust layer for AI agents with identity, reputation, payments, and discovery via 92 API endpoints as MCP tools, leveraging Nostr-native infrastructure.
    MIT