Gatefareio

io.github.gatefareioPublished by GitHub account gatefareiov1.1.0Updated Oct 27, 2026

Marketplace of paid HTTP APIs. USDC micropayments via x402 on Base. Non-custodial.

Overview

AI-generated overview

Connects an AI assistant to the Gatefare marketplace of paid HTTP APIs, letting it search the catalog and pay per call in USDC on Base via x402.

What you can do
  • Search, inspect and browse the API catalog: full-text search with price and category filters, API details, categories, autocomplete
  • Make paid API calls with automatic 402 handling and local signing, check wallet balance, estimate cost for planned calls
  • Publish and manage your own paid APIs, view revenue, and trigger on-chain payouts
  • Report malicious or stolen APIs
  • Tools register only when the matching credentials are set, so the assistant never sees a tool it cannot use
When to use it
Use it when you want an assistant to discover and buy per-call HTTP APIs without subscriptions or API keys, or when you publish paid APIs on Gatefare and want to manage them and check revenue from the chat client.
Requirements
Local Node.js process run via npx from the npm package @gatefare/mcp, configured in an MCP client such as Claude Desktop or Cursor. Buyer tools need WALLET_PRIVATE_KEY (an EVM key) and optionally WALLET_BUDGET_USD and WALLET_NETWORK; publisher tools need GATEFARE_PAT. GATEFARE_BASE_URL overrides the endpoint for self-hosted use. Network access to Gatefare and Base is required.
Before you install
WALLET_PRIVATE_KEY is a real EVM private key that signs USDC payments; anyone with it controls the wallet, so use a dedicated low-balance wallet. Paid calls spend real USDC on Base mainnet by default, and WALLET_BUDGET_USD is only a runtime cap, not a hard limit. Publisher tools change listings and distribute triggers an on-chain payout described as destructive. GATEFARE_PAT grants access to your publisher account. Requests and payment headers go to Gatefare.

Installation

In SourceWeft

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

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

@gatefare/mcp

[npm version] [npm downloads] [bundle size] [License: MIT] [CI] [MCP Registry] [mcp.so] [Glama] [Base]

Give your AI agent a wallet and a marketplace.

@gatefare/mcp is a Model Context Protocol server that connects Claude Desktop, Cursor, or any MCP-compatible agent to the Gatefare catalog of paid HTTP APIs. Payments settle as USDC on Base via the open x402 standard — no SaaS keys, no subscriptions, no escrow. Non-custodial: signing happens locally; the private key never leaves your machine.

[Demo: install, list tools, real call against gatefare.io]

┌─────────────┐                ┌──────────────┐                ┌─────────────────┐│ Claude /    │   MCP stdio    │ @gatefare/mcp│  HTTP + x402   │ gatefare.io     ││ Cursor /    │ ─────────────► │   (this repo)│ ─────────────► │ proxy +         ││ your agent  │                │              │                │ catalog         │└─────────────┘                └──────┬───────┘                └─────────────────┘                                      │                                      │ EIP-3009 sign                                      ▼                                ┌─────────────┐                                │  Base USDC  │                                └─────────────┘

Quick start

1. Drop into your client

Claude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "gatefare": {      "command": "npx",      "args": ["-y", "@gatefare/mcp"]    }  }}

Cursor — ~/.cursor/mcp.json or project-level .cursor/mcp.json:

json
{  "mcpServers": {    "gatefare": {      "command": "npx",      "args": ["-y", "@gatefare/mcp"]    }  }}

Restart the client. The agent now has 5 read-only tools — discovery + safety. Try:

"Search Gatefare for weather APIs."

2. Add a wallet to make paid calls

Add env to the same config:

json
{  "mcpServers": {    "gatefare": {      "command": "npx",      "args": ["-y", "@gatefare/mcp"],      "env": {        "WALLET_PRIVATE_KEY": "0xYOUR_KEY",        "WALLET_BUDGET_USD": "5.00"      }    }  }}

Buyer tools (call_api, get_wallet_balance, estimate_cost) become available. The WALLET_BUDGET_USD cap is a runtime safety net — for a hard cap, fund the wallet with only what you're willing to spend.

"What's London's weather right now? Spend up to $0.001."

3. (Optional) Publish your own APIs

Get a PAT at gatefare.io/dashboard/tokens and add:

json
"env": {  "GATEFARE_PAT": "gfpat_..."}

Publisher tools (register_api, list_my_apis, update_api, get_revenue, distribute) appear.

"Publish my API at https://api.example.com/sentiment for $0.001 per call."

Tools

13 tools across 4 domains. Tools auto-register based on which env vars are set — the agent never sees a tool it can't use.

Discovery — always available

ToolDescription
gatefare.search_apisFull-text search the catalog with filters (price, category, sort)
gatefare.get_apiFull details for one API by slug or handle/urlName
gatefare.list_categoriesAll categories with API counts
gatefare.suggestAutocomplete suggestions for a query string

Buyer — needs WALLET_PRIVATE_KEY

ToolDescription
gatefare.call_apiMake a paid call. Handles 402 → sign → retry automatically
gatefare.get_wallet_balanceUSDC + ETH on Base, plus remaining runtime budget
gatefare.estimate_costProject total cost for N planned calls

Publisher — needs GATEFARE_PAT

ToolDescription
gatefare.register_apiPublish a new paid API
gatefare.list_my_apisYour published APIs with stats
gatefare.update_apiEdit metadata, price, target URL
gatefare.get_revenueRevenue time series + totals
gatefare.distributeTrigger on-chain distribute() payout (destructive)

Safety — always available

ToolDescription
gatefare.report_abuseReport a malicious / stolen API (DMCA, fraud, malware…)

Configuration

VarDefaultRequired for
GATEFARE_BASE_URLhttps://gatefare.io— (override for self-hosted)
WALLET_PRIVATE_KEY—Any buyer tool
WALLET_BUDGET_USDunlimitedOptional spend cap
WALLET_NETWORKeip155:8453eip155:84532 for Sepolia testnet
GATEFARE_PAT—Any publisher tool
LOG_LEVELinfodebug for verbose stderr

Examples

Discover & buy in one breath (Claude Desktop)

You: Find me a sub-$0.001 weather API and call it for "Tokyo".

Claude: Calling gatefare.search_apis with max_price: 0.001…
Found demo-weather by @alice at $0.001/call.
Calling gatefare.call_api with slug: "demo-weather", query: {city: "Tokyo"}…
Tokyo is 22°C, partly cloudy. Paid 0.001 USDC. Receipt: settled-tx-0x9a…

Programmatic — Python agent

python
from mcp import ClientSession, StdioServerParametersfrom mcp.client.stdio import stdio_client
server = StdioServerParameters(    command="npx",    args=["-y", "@gatefare/mcp"],    env={"WALLET_PRIVATE_KEY": "0x...", "WALLET_BUDGET_USD": "1.00"},)
async with stdio_client(server) as (r, w):    async with ClientSession(r, w) as s:        await s.initialize()        result = await s.call_tool(            "gatefare.call_api",            arguments={"slug": "demo-weather", "query": {"city": "Tokyo"}},        )        print(result.content[0].text)

See examples/ for runnable variants: Claude Desktop, Cursor, Python, TypeScript, and a pure-discovery walkthrough.

Not building an AI agent? Picking the right tool

If you want to pay for x402 APIs from a backend (no agent), use Coinbase's official x402 SDKs — x402-python (PyPI), coinbase/x402/go, …/java, or @x402/fetch. They handle the payment flow; you don't need this MCP server.

If you want to browse the Gatefare catalog from any language, hit the REST API directly: gatefare.io/api/catalog (OpenAPI 3.1 spec).

Full breakdown of which tool fits which use case in docs/integrations.md.

Direct CLI (for debugging)

bash
# Run the server in foreground; talks JSON-RPC over stdio.npx -y @gatefare/mcp
# In another terminal, send a frame:echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | \  npx -y @gatefare/mcp

Errors

Tool results include isError: true and a structured body { error: <code>, message: <human>, details?: <any> }. Codes are stable — agents can switch on them for retry / surfacing logic.

CodeMeaning
INVALID_INPUTInput failed zod validation
WALLET_NOT_CONFIGUREDSet WALLET_PRIVATE_KEY for buyer tools
PAT_NOT_CONFIGUREDSet GATEFARE_PAT for publisher tools
BUDGET_EXHAUSTEDRuntime budget cap hit
INSUFFICIENT_BALANCEWallet doesn't have enough USDC
PRICE_TOO_HIGHServer's price exceeds your max_price
API_NOT_FOUNDSlug doesn't exist or is suspended
UPSTREAM_ERRORPaid API returned non-2xx, or its 402 was malformed
RATE_LIMITEDGatefare rate-limited the request
NETWORK_ERRORCould not reach Gatefare
GATEFARE_API_ERRORGatefare returned a 4xx / 5xx

How it works (the 30-second version)

  1. The agent calls gatefare.call_api { slug: "demo-weather", … }.
  2. We GET https://gatefare.io/p/demo-weather (no payment yet).
  3. The Gatefare proxy returns 402 Payment Required with accepts: [{network, payTo, maxAmountRequired, …}].
  4. We sign an EIP-3009 transferWithAuthorization for that exact amount and recipient on the configured network.
  5. We retry the request with the signed X-Payment header (base64-encoded JSON, x402 v2).
  6. Gatefare verifies the signature, settles the USDC transfer, and proxies the call to the upstream API.
  7. We hand the upstream response (and a payment receipt) back to the agent.

The signature is single-use, time-bounded, and never leaves your machine for any purpose other than this exact transfer to this exact payTo. The private key is never logged.

Security

  • Non-custodial. Private keys live in your env, signing happens locally, no Gatefare service ever sees them.
  • Network confusion-resistant. A malicious gateway returning Sepolia-only requirements to a mainnet user is rejected — we never sign for a chain the user didn't configure.
  • Cryptographically random nonces. No Date.now()-based collisions.
  • Validity window clamped to 1 hour even if the server requests more.
  • Strict input validation. Slugs are ^[a-z0-9_-]+$ and URL-encoded; no path traversal. targetUrl blocks file://, localhost, cloud metadata IPs, .local, and .internal hosts at registration time.
  • Secret hygiene. Tests assert that the private key and PAT never appear in stderr / stdout, ever.

Development

bash
git clone https://github.com/gatefareio/mcp-server.gitcd mcp-servernpm installnpm run typechecknpm test                  # 138 unit testsnpm run test:e2e          # 10 e2e tests against live gatefare.io (set GATEFARE_E2E=1)npm run build

To use a local checkout in your client config:

bash
npm link# in claude_desktop_config.json:#   "command": "gatefare-mcp"

Architecture

src/├── index.ts        # entry — wires stdio transport├── server.ts       # McpServer instance + tool registration├── config.ts       # env parsing, capability detection├── client.ts       # REST client (wraps fetch)├── x402.ts         # 402 parsing + EIP-3009 signing├── types.ts        # shared types + GatefareError└── tools/    ├── discovery.ts   # search_apis, get_api, list_categories, suggest    ├── buyer.ts       # call_api, get_wallet_balance, estimate_cost    ├── publisher.ts   # register_api, list_my_apis, update_api, get_revenue, distribute    └── safety.ts      # report_abuse

Test layout

tests/├── config.test.ts         # env parsing edges├── client.test.ts         # HTTP client error mapping├── x402.test.ts           # signing + parsing primitives├── x402-flow.test.ts      # full 402 → sign → retry handshake (mocked fetch)├── server.test.ts         # capability-driven tool registration├── init.test.ts           # subprocess: bootstrap, env crashes, secret leakage├── stdio-protocol.test.ts # stdout pollution + recovery from tool errors├── stability.test.ts      # 100 concurrent calls, memory baseline, ReDoS├── tools/│   ├── discovery.test.ts│   ├── buyer.test.ts│   ├── buyer-flow.test.ts│   ├── publisher.test.ts│   └── safety.test.ts└── integration/    └── e2e.test.ts        # real gatefare.io, gated by GATEFARE_E2E=1

Contributing

Issues and PRs welcome. See CONTRIBUTING.md for the workflow, style guide, and how to add a new tool.

Related packages

Gatefare ships three first-party packages. They share the same x402 protocol and the same backend, so a project can mix them as needed:

PackageWhereWhen to use
@gatefare/mcp (this one)npmDrop into Claude Desktop / Cursor / any MCP host to give the agent tools for catalog discovery + paid calls
@gatefare/clientnpmTypeScript / JavaScript agents that pay APIs in code, outside MCP
gatefarePyPIPython agents (LangChain, LlamaIndex, etc.)

License

MIT © Gatefare

Links

Source: README.md at commit 6e3a63d

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.1.0LatestSep 16, 2026

Score

50% 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 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts