Quidli Connect

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.

Overview

AI-generated overview

Resolves social handles to EVM and Solana wallets, scores onchain reputation, and sends tokens from a Connect embedded wallet.

What you can do
  • Resolve social identities (GitHub, X, Telegram, Discord, LinkedIn, Farcaster, email, phone) to EVM and Solana wallet addresses, and list platforms a recipient has exposed
  • Score onchain reputation for one account, a Connect username, or a batch of identities, with optional pass/fail filters
  • Send native, ERC-20 or SPL tokens to one or many recipients from the key owner's embedded wallet, optionally gated by a trust filter
  • Check embedded wallet balances per chain, and list supported chains with per-feature compatibility
  • Create, check, list and revoke onchain trust attestations on Base via EAS
  • Read reference x402 prices and the API key owner's own profile and linked accounts
When to use it
Useful when an agent needs to pay or vet a counterparty it has no prior relationship with: turning a social handle into a wallet address, checking reputation before sending funds, or batching payouts to many recipients. Also fits workflows that need a verifiable onchain trust graph.
Requirements
Either the hosted endpoint (no install) or the local npm package, which needs Node.js 20+. Optional CONNECT_API_KEY for higher limits, profile and Smart Send tools; or EVM_PRIVATE_KEY plus CONNECT_X402_EVM_NETWORK for pay-per-call with USDC on Base. Lookup, scores, price and chains work without credentials under a shared anonymous quota. Trust attestations need ETH on Base for gas.
Before you install
Sending tools move real funds from the key owner's embedded wallet, and trust attestations cost gas. The x402 mode requires putting a wallet private key in EVM_PRIVATE_KEY; the README warns not to send a private key to the hosted endpoint. Resolving a recipient with no wallet provisions one for them, so a lookup is not side-effect free. Lookups may require payment when the profile owner charges, and identity data is sent to Quidli's API.

Installation

In SourceWeft

  1. Open Quidli Connect in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

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.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

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

README

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:

bash
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:

bash
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.

json
{  "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.


Choose how to connect

Hosted (mcp.connect.quid.li)Local (npx @quidli/connect-mcp)
SetupAdd a URL in MCP settingsRun a local process via npx
AuthOptional API key. Without a key: lookup/scores under a shared anonymous quota; price/chains are publicAPI key, x402 pay-per-call, or none for lookup/scores
ProsNo install; try without a key; always on Quidli infrastructureWallet private key never leaves your machine; pay per call with USDC instead of an API key
ConsAnonymous traffic shares a global rate limit; no pay-per-call billingRequires Node.js 20+; npx may download the package on first run
LimitationsCannot use x402 / wallet auth — do not send a private key to the hosted endpointx402 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.


Hosted (recommended)

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:

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

Optional — higher limits and Smart Send:

json
"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
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):

json
{  "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.

bash
npx smithery loginnpx 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.

json
{  "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.

json
{  "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.

json
{  "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
json
{  "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)
json
{  "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.

json
{  "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:

ts
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:

ChainChain IDNative token
Ethereum1ETH
Base8453ETH
Polygon137POL
OP Mainnet10ETH
Arbitrum One42161ETH
Avalanche43114AVAX
World Chain480ETH
Monad143MON
Robinhood Chain4663ETH
Solana1399811149SOL

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

ToolWhat it does
connect_get_priceList reference prices (no auth)
connect_get_chainsList supported chains and feature compatibility (no auth)
connect_lookupResolve social identities to EVM and SOL wallet addresses
connect_lookup_exposedList platforms a recipient has exposed on Connect
connect_scores_batchBatch scores for accounts or usernames
connect_scores_by_accountScores for one linked account
connect_scores_by_usernameScores by Connect username
connect_meAPI key owner profile, scores, and linked accounts — API key only
connect_dropSmart Send (EVM batch or Solana SOL/SPL); accepts trustFilter to gate recipients by trust graph — API key only
connect_drop_balanceSmart Send wallet balances on a chain — API key only. Token coverage varies by chain, see Supported chains
connect_trust_createCreate one or more on-chain trust attestations in one EAS transaction (Base) — API key only
connect_trust_checkCheck whether identities sit in a trust graph at depth 1
connect_trust_graphList outgoing/incoming trust edges for an identity
connect_trust_revokeRevoke active trust attestations by target — API key only

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

Trust graph

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.

Vouch for people

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.

json
{  "to": [    { "type": "github",    "username": "alice" },    { "type": "farcaster", "username": "bob"   },    { "type": "wallet",    "id": "0x1234..."   }  ],  "level": 80,  "context": "team:quidli"}

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.

Pay only people you trust

connect_drop accepts a trustFilter that keeps recipients inside the sender's trust graph:

json
{ "trustFilter": { "mode": "skip", "context": "team:quidli" } }

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.

Read and revoke

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.

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.

Source: README.md at commit 04d2b9b

Tools

14

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.

connect_get_chains

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.

connect_lookup

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.

Parametersrecipientsrequired

connect_lookup_exposed

List 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.

Parametersrecipientrequired

connect_scores_batch

Score 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).

Parametersusersrequiredfilter

connect_scores_by_account

Score a Linked Account

Scores for a linked social account or wallet.

Parametersplatformrequiredidentifierrequired

connect_scores_by_username

Score a Connect Username

Scores by Connect public username.

Parametersusernamerequired

connect_me

Get 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.

connect_drop

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)

ParameterschainIdrequiredrecipientsrequiredtrustFiltertokenContracttokenStandardidempotencyKeyrequiredignoreFailedRecipientsamountInWeiPerRecipient

connect_drop_balance

Check 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.

ParameterschainIdrequired

connect_trust_create

Create 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.

ParameterstorequiredlevelrequiredcontextexpiresIn

connect_trust_revoke

Revoke 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.

Parameterstorequiredcontext

connect_trust_check

Check Trust

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

Parametersfromrequiredcontexttargetsrequired

connect_trust_graph

List Trust Edges

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

Parameterscontextplatformrequireddirectionidentifierrequired

Version history

7
  1. v0.6.22LatestNov 7, 2026
  2. v0.6.20Nov 3, 2026
  3. v0.6.19Oct 29, 2026
  4. v0.6.17Oct 26, 2026
  5. v0.6.16Oct 26, 2026
  6. v0.6.15Oct 23, 2026
  7. v0.6.12Oct 17, 2026

Score

100% 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.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts