{"slug": "show-hn-agent-payments-by-social-handles-not-stripe-based-not-on-bank-rails", "title": "Show HN: Agent payments by social handles (not Stripe-based, not on bank rails)", "summary": "Quidli launched Connect, an open payments system that lets AI agents send tokens to people or other agents by resolving social handles from Telegram, Discord, Farcaster, X, GitHub, LinkedIn, email, and phone to wallets, with reputation checks before transactions. The service is available as an MCP server compatible with Cursor, Claude Desktop, and Claude Code, and requires no API key for basic lookups, though a key unlocks higher limits and Smart Send. The public repository is on GitHub at github.com/Quidli/connect-mcp.", "body_md": "Open payments for multiplayer agents, powered by social reputation. Resolve a social handle to a wallet, check reputation, and send tokens — from Cursor, Claude Desktop, Claude Code, or any MCP-compatible client.\n\nMultiplayer 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.\n\nPublic repository: [github.com/Quidli/connect-mcp](https://github.com/Quidli/connect-mcp)\n\nNo API key required.\n\n**Claude Code:**\n\n```\nclaude mcp add --transport http quidli https://mcp.connect.quid.li/\n```\n\n**Cursor:** Add to Cursor (or paste that link into **Settings → MCP → Add new MCP server**)\n\n**Claude Desktop:** **Settings → Connectors → Add custom connector**, URL `https://mcp.connect.quid.li`\n\n**Local (any client)** — runs on your machine instead of the hosted endpoint:\n\n```\nnpx -y @quidli/connect-mcp\n```\n\nSee [Choose how to connect](#choose-how-to-connect) below for API keys, x402 wallet pay-per-call, and full config snippets.\n\nThen ask your agent:\n\nResolve the Farcaster handle `ahn.eth` to a wallet.\n\n```\n{\n  \"status\": \"completed\",\n  \"results\": [\n    {\n      \"type\": \"farcaster\",\n      \"value\": \"ahn.eth\",\n      \"ethWalletAddress\": \"0x07De92Ce6474D718c80e696516bf0bE53290fF5E\",\n      \"solWalletAddress\": \"9DD2CqPKZJoo7ZRgCXxJNMjhzfgVihSKtkZpn8qnEWK9\"\n    }\n  ]\n}\n```\n\nResolves across Telegram, Discord, Farcaster, X, GitHub, LinkedIn, email and phone — and generates a wallet for people who have never used Quidli.\n\nLookup, scores, and price run without a key under a shared anonymous quota. Add a [Connect API key](https://connect.quid.li) for higher limits, your own profile (`connect_me`), and Smart Send.\n\n|  | **Hosted** (`mcp.connect.quid.li` ) | **Local** (`npx @quidli/connect-mcp` ) | \n|---|---|---|\n| **Setup** | Add a URL in MCP settings | Run a local process via `npx` | \n| **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 | \n| **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 | \n| **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 | \n| **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 | \n\nGet a Connect API key at [connect.quid.li](https://connect.quid.li) → **Enable API access** for higher limits, `connect_me`, and Smart Send.\n\nZero 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.\n\n**If you already have other MCP servers:** skip the deeplink and [add manually](#cursor-manual) — the one-click install can overwrite your entire `mcp.json` in some Cursor versions.\n\nAdd to Cursor\n\nOr paste into **Cursor Settings → MCP → Add new MCP server**:\n\n```\ncursor://anysphere.cursor-deeplink/mcp/install?name=quidli-connect&config=eyJ1cmwiOiJodHRwczovL21jcC5jb25uZWN0LnF1aWQubGkifQ==\n```\n\nMerge this into `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project) under `mcpServers` — do not replace your existing entries:\n\n```\n\"quidli-connect\": {\n  \"url\": \"https://mcp.connect.quid.li\"\n}\n```\n\nOptional — higher limits and Smart Send:\n\n```\n\"quidli-connect\": {\n  \"url\": \"https://mcp.connect.quid.li\",\n  \"headers\": {\n    \"x-api-key\": \"<your-connect-api-key>\"\n  }\n}\n```\n\n1. Open **Claude → Settings → Connectors** (or**Settings → Developer → Edit Config** on older versions).\n2. Add a custom MCP connector with URL `https://mcp.connect.quid.li` . Optionally set header`x-api-key: <your-connect-api-key>` .\n\nOr merge this into your config file and restart Claude:\n\n- **macOS:**`~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:**`%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"url\": \"https://mcp.connect.quid.li\"\n    }\n  }\n}\n```\n\nIf your Claude version does not support remote `url` connectors, use the local bridge instead (still hosted API, runs a small local helper):\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-remote@latest\",\n        \"--http\",\n        \"https://mcp.connect.quid.li\"\n      ]\n    }\n  }\n}\n```\n\nRequires **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.\n\nWithout 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**.\n\n1. Go to [grok.com/connectors](https://grok.com/connectors) and select**Custom** .\n2. Enter the server URL: `https://mcp.connect.quid.li`\n\nThis gives Grok access to the anonymous-tier tools -- lookup, scores, agent, and price -- under the shared quota.\n\n**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.\n\nIf you already use [Smithery](https://smithery.ai/servers/quidli/connect), it will handle auth and sessions for you. Requires a Smithery account.\n\n```\nnpx smithery login\nnpx smithery mcp add quidli/connect\n```\n\nBest if you want pay-per-call with a wallet, or prefer credentials in a local env file.\n\nRequires **Node.js 20+**.\n\nAdd one of the following to `.cursor/mcp.json` (project) or your global MCP settings.\n\nSame billing model as hosted; credentials stay on your machine.\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@quidli/connect-mcp\"],\n      \"env\": {\n        \"CONNECT_API_KEY\": \"<your-connect-api-key>\",\n        \"CONNECT_API_BASE_URL\": \"https://api.connect.quid.li\"\n      }\n    }\n  }\n}\n```\n\nNo API key. Authenticated calls pay automatically when the API returns HTTP 402. Your wallet private key is only read by the local process.\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@quidli/connect-mcp\"],\n      \"env\": {\n        \"EVM_PRIVATE_KEY\": \"0x<wallet-with-usdc-on-base>\",\n        \"CONNECT_API_BASE_URL\": \"https://api.connect.quid.li\",\n        \"CONNECT_X402_EVM_NETWORK\": \"8453\"\n      }\n    }\n  }\n}\n```\n\nUse `84532` for Base Sepolia when pointing at a staging API.\n\nThe 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.\n\n`connect_me`, `connect_drop`, and `connect_drop_balance` still require `CONNECT_API_KEY`.\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@quidli/connect-mcp\"],\n      \"env\": {\n        \"CONNECT_API_BASE_URL\": \"http://127.0.0.1:3011\"\n      }\n    }\n  }\n}\n```\n\n1. Open **Claude → Settings → Developer → Edit Config** (enable Developer mode first if you do not see it).\n2. Merge one of the blocks below into `mcpServers` in:\n\n- **macOS:**`~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:**`%APPDATA%\\Claude\\claude_desktop_config.json`\n\n1. Restart Claude Desktop.\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@quidli/connect-mcp\"],\n      \"env\": {\n        \"CONNECT_API_KEY\": \"<your-connect-api-key>\",\n        \"CONNECT_API_BASE_URL\": \"https://api.connect.quid.li\"\n      }\n    }\n  }\n}\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@quidli/connect-mcp\"],\n      \"env\": {\n        \"EVM_PRIVATE_KEY\": \"0x<wallet-with-usdc-on-base>\",\n        \"CONNECT_API_BASE_URL\": \"https://api.connect.quid.li\",\n        \"CONNECT_X402_EVM_NETWORK\": \"8453\"\n      }\n    }\n  }\n}\n```\n\nIf both `CONNECT_API_KEY` and `EVM_PRIVATE_KEY` are set, the API key is used.\n\nCredentials 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`.\n\nIf you're launching `@quidli/connect-mcp` via `npx` from inside a background\nprocess manager -- a macOS `launchd` agent, a systemd unit, a supervisor, or\nany client config running without a normal interactive shell -- it can hang\n**indefinitely with zero output and no error**. This isn't a crash; `npx` is\nstuck resolving `PATH` in an environment that doesn't provide the same shell\ninitialization an interactive terminal gets.\n\n**Workaround:** if you have [Bun](https://bun.sh) installed, use `bunx`\ninstead of `npx`. It performs the same job -- running the package without a\nlocal install -- but doesn't hit this hang in restricted-`PATH` environments.\n\n```\n{\n  \"mcpServers\": {\n    \"quidli-connect\": {\n      \"command\": \"bunx\",\n      \"args\": [\"-y\", \"@quidli/connect-mcp\"],\n      \"env\": {\n        \"CONNECT_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\nIf you're spawning the process yourself (rather than through a client's MCP\nconfig) and want to be resilient to `bunx` not being on `PATH` either,\nresolve it by absolute path first:\n\n``` js\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nconst BUNX_PATH = (() => {\n  const candidate = join(homedir(), \".bun\", \"bin\", \"bunx\");\n  return existsSync(candidate) ? candidate : \"bunx\";\n})();\n\nconst proc = spawn(BUNX_PATH, [\"-y\", \"@quidli/connect-mcp\"], {\n  stdio: [\"pipe\", \"pipe\", \"pipe\"],\n});\n```\n\nThis isn't a general claim that Bun is better than npm -- it's a targeted fix\nfor one specific, reproducible failure mode when `npx` is spawned outside an\ninteractive shell.\n\nDouble-check you're setting `CONNECT_API_KEY`, not `API_KEY` -- the server\nonly reads `CONNECT_API_KEY`, and a mismatch here fails silently: your calls\nwill run in anonymous/unauthenticated mode instead of erroring, which can\nlook like a working-but-oddly-limited connection rather than a config\nmistake.\n\n| Tool | What it does | \n|---|---|\n| `connect_get_price` | List reference prices (no auth) | \n| `connect_get_chains` | List supported chains and feature compatibility (no auth) | \n| `connect_lookup` | Resolve social identities to EVM and SOL wallet addresses | \n| `connect_lookup_exposed` | List platforms a recipient has exposed on Connect | \n| `connect_scores_batch` | Batch scores for accounts or usernames | \n| `connect_scores_by_account` | Scores for one linked account | \n| `connect_scores_by_username` | Scores by Connect username | \n| `connect_me` | API key owner profile, scores, and linked accounts — **API key only** | \n| `connect_drop` | Smart Send (EVM batch or Solana SOL/SPL) — **API key only** | \n| `connect_drop_balance` | Smart Send wallet balances on a chain — **API key only** | \n\nAsk your client to use these tools when you need Connect data or actions.", "url": "https://wpnews.pro/news/show-hn-agent-payments-by-social-handles-not-stripe-based-not-on-bank-rails", "canonical_source": "https://github.com/Quidli/connect-mcp", "published_at": "2026-09-09 09:31:15+00:00", "updated_at": "2026-09-09 10:12:47.343588+00:00", "lang": "en", "topics": ["ai-agents", "ai-products", "ai-infrastructure"], "entities": ["Quidli", "Cursor", "Claude Desktop", "Claude Code", "GitHub", "Farcaster", "Telegram", "Discord"], "alternates": {"html": "https://wpnews.pro/news/show-hn-agent-payments-by-social-handles-not-stripe-based-not-on-bank-rails", "markdown": "https://wpnews.pro/news/show-hn-agent-payments-by-social-handles-not-stripe-based-not-on-bank-rails.md", "text": "https://wpnews.pro/news/show-hn-agent-payments-by-social-handles-not-stripe-based-not-on-bank-rails.txt", "jsonld": "https://wpnews.pro/news/show-hn-agent-payments-by-social-handles-not-stripe-based-not-on-bank-rails.jsonld"}}