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

io.github.QuidliPublished by GitHub account Quidliv0.6.22Updated Nov 7, 2026
Resolve social handles to wallets, score onchain reputation, pay in any ERC-20, SPL or native.
Resolves social handles to EVM and Solana wallets, scores onchain reputation, and sends tokens from a Connect embedded wallet.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.Quidli%2Fconnect-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"quidli-connect": {
"type": "http",
"url": "https://mcp.connect.quid.li/"
}
}
}[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
No API key required.
Claude Code:
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:
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
justinquidlito a wallet.
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.
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.
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:
Merge this into ~/.cursor/mcp.json (global) or .cursor/mcp.json (project) under mcpServers — do not replace your existing entries:
Optional — higher limits and Smart Send:
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:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonIf your Claude version does not support remote url connectors, use the local bridge instead (still hosted API, runs a small local helper):
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.
https://mcp.connect.quid.liThis 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.
If you already use Smithery, it will handle auth and sessions for you. Requires a Smithery account.
Best if you want pay-per-call with a wallet, or prefer credentials in a local env file.
Requires Node.js 20+.
Add one of the following to .cursor/mcp.json (project) or your global MCP settings.
Same billing model as hosted; credentials stay on your machine.
No API key. Authenticated calls pay automatically when the API returns HTTP 402. Your wallet private key is only read by the local process.
Use 84532 for Base Sepolia when pointing at a staging API.
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 in:~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonIf 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.
npx hangs with no output when run from a background serviceIf 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.
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:
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.
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.
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:
World Chain Sepolia (4801) is also listed, as a testnet.
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.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.Ask your client to use these tools when you need Connect data or actions.
Connect writes trust attestations on Base via EAS. An attestation is unidirectional — you vouch for someone — and anyone can verify it without asking Connect, because it lives onchain rather than in a Quidli database.
connect_trust_create takes up to 50 identities and attests them in a single
transaction, so gas is paid once rather than per person. level (1–100),
context and expiresIn apply to every entry in the batch.
Identical active attestations are returned without submitting a new
transaction. Recipients still being provisioned come back as processing
while the rest are attested.
Requires an API key, the Smart Send attestation signer enrolled, and ETH on Base for gas when a new attestation is submitted.
connect_drop accepts a trustFilter that keeps recipients inside the
sender's trust graph:
require fails the drop if any recipient is outside the graph; skip pays
the ones inside it and drops the others. Omit context to match any context.
connect_trust_check reports whether identities sit in a trust graph at
depth 1. connect_trust_graph lists outgoing or incoming edges for an
identity. connect_trust_revoke revokes active attestations to a target,
optionally scoped by context.
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.
Source: README.md at commit 04d2b9b
Get x402 Prices
Get public x402 list prices for lookup and scores (reference only; live paywall amounts are in 402 responses).
Takes no parameters.
List Supported Chains
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).
Takes no parameters.
Resolve Handle to Wallet
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.
recipientsrequiredList Exposed Accounts
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.
recipientrequiredScore Identities (Batch)
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).
usersrequiredfilterScore a Linked Account
Scores for a linked social account or wallet.
platformrequiredidentifierrequiredScore a Connect Username
Scores by Connect public username.
usernamerequiredGet My Connect Profile
Get the Connect profile, scores, and all linked accounts for the API key owner. Use to identify which user the key belongs to.
Takes no parameters.
Send Tokens (Smart Send)
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. ERC-721: set tokenStandard to erc721, tokenContract to the collection, and tokenId on each recipient. Do not send an amount. One safeTransferFrom per NFT. ERC-1155: set tokenStandard to erc1155, tokenContract to the contract, and tokenId plus tokenAmount (quantity, at least 1)
chainIdrequiredrecipientsrequiredtrustFiltertokenContracttokenStandardidempotencyKeyrequiredignoreFailedRecipientsamountInWeiPerRecipientCheck Smart Send Balance
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.
chainIdrequiredCreate Trust Attestation
Create unidirectional trust attestations on Base (EAS) from the API key owner embedded wallet to one or more wallets or social identities, in a single transaction. Identical active attestations are returned without a new transaction. Recipients still provisioning are reported as processing while the others are attested. Requires CONNECT_API_KEY, Smart Send attestation signer enrolled, and ETH on Base for gas when a new attestation is submitted.
torequiredlevelrequiredcontextexpiresInRevoke Trust Attestation
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.
torequiredcontextCheck Trust
Check whether identities sit in a trust graph at depth 1. Omit context to match any context.
fromrequiredcontexttargetsrequiredList Trust Edges
List outgoing or incoming trust edges for an identity at depth 1.
contextplatformrequireddirectionidentifierrequired100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
claude mcp add --transport http quidli https://mcp.connect.quid.li/npx -y @quidli/connect-mcp{ "status": "completed", "results": [ { "type": "github", "value": "justinquidli", "ethWalletAddress": "0x6a48ADE3bE3F9f0b8B4c9af61Bb654A219311699", "solWalletAddress": "8vo1awED98mwqDa4qR9JyMsk7qJYiwnTSG4EnXGyWXRh" } ]}cursor://anysphere.cursor-deeplink/mcp/install?name=quidli-connect&config=eyJ1cmwiOiJodHRwczovL21jcC5jb25uZWN0LnF1aWQubGkifQ=="quidli-connect": { "url": "https://mcp.connect.quid.li"}"quidli-connect": { "url": "https://mcp.connect.quid.li", "headers": { "x-api-key": "<your-connect-api-key>" }}{ "mcpServers": { "quidli-connect": { "url": "https://mcp.connect.quid.li" } }}{ "mcpServers": { "quidli-connect": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "--http", "https://mcp.connect.quid.li" ] } }}npx smithery loginnpx smithery mcp add quidli/connect{ "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" } } }}{ "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" } } }}{ "mcpServers": { "quidli-connect": { "command": "npx", "args": ["-y", "@quidli/connect-mcp"], "env": { "CONNECT_API_BASE_URL": "http://127.0.0.1:3011" } } }}{ "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" } } }}{ "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" } } }}{ "mcpServers": { "quidli-connect": { "command": "bunx", "args": ["-y", "@quidli/connect-mcp"], "env": { "CONNECT_API_KEY": "your-api-key" } } }}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"],});{ "to": [ { "type": "github", "username": "alice" }, { "type": "farcaster", "username": "bob" }, { "type": "wallet", "id": "0x1234..." } ], "level": 80, "context": "team:quidli"}{ "trustFilter": { "mode": "skip", "context": "team:quidli" } }