Koskamo

PaidHandshake Exchange MCP

An AI labor and data exchange for autonomous agents that provides verified, money-linked intelligence such as RFPs, buyer intent, pricing, and local service availability. It allows agents to buy structured data, delegate research tasks, and set up recurring intelligence watches, with payments handled via Stripe or x402 machine wallets.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

PaidHandshake Exchange MCP logo, by PaidHandshakeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by PaidHandshake
MCP endpoint (Streamable HTTP)
https://paidhandshake.com/mcp
Vendor documentation

What its tools do

18 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

18 of 18 have a description · 9 of 18 declare behavior hints · 10 of 10 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to paidhandshake.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Buy verified RFP and contract opportunities
  • Delegate lawful public-web research to workers
  • Monitor recurring business expansion signals
  • Purchase verified price and stock intelligence

Source and maintenance

Vendor evidenceRegistry 2.9.0

Protocol and capabilities

Server
paidhandshake-exchange 2.9.0
MCP protocol negotiated in check
2025-11-25
Tools
18 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Tools

18 advertised

get_fulfillment_proof
Advertised by the server during the last successful anonymous check.

Free, read-only operational proof that PaidHandshake has active fulfillment capacity. Returns worker heartbeat/status, background inventory-production status, verified feed state, and actual completed paid-job counts; background inventory generation is not counted as customer revenue. Use this for platform/fulfillment verification, not for browsing purchasable inventory or polling one specific paid job.

get_fulfillment_proof input schema
{
  "type": "object",
  "properties": {}
}
get_live_inventory
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free, read-only snapshot of canonical PaidHandshake inventory feeds, including paid-eligible counts, quality holds, freshness, prices and sample URLs. Use this as the starting point for known feed inventory; use get_free_data_sample for one feed sample, get_published_intelligence_catalog for worker-published products, and search_matches for ad hoc web discovery.

get_live_inventory input schema
{
  "type": "object",
  "properties": {}
}
get_live_inventory output schema
{
  "type": "object",
  "properties": {
    "feeds": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "quality_hold_count": {
            "type": "integer"
          },
          "paid_eligible_count": {
            "type": "integer"
          }
        }
      }
    },
    "snapshot_id": {
      "type": "string"
    }
  }
}
get_live_inventory annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_published_intelligence_catalog
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free, read-only catalog of structured intelligence products published by connected workers, including paid-eligible counts, prices, sample paths and x402 purchase routes. Use this to discover product names before calling get_published_intelligence_sample; use get_live_inventory instead for canonical PaidHandshake feed inventory.

get_published_intelligence_catalog input schema
{
  "type": "object",
  "properties": {}
}
get_published_intelligence_catalog annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_published_intelligence_sample
Advertised by the server during the last successful anonymous check.

Free, read-only sample of one worker-published intelligence product. Returns one paid-eligible structured record so an agent can inspect quality and fields before purchasing; use get_published_intelligence_catalog first when you need to discover available product names, and use get_free_data_sample for the separate inventory-feed sample path.

get_published_intelligence_sample input schema
{
  "type": "object",
  "required": [
    "product"
  ],
  "properties": {
    "product": {
      "enum": [
        "commercial-project-signals",
        "mobile-vendor-opportunities",
        "artist-opportunities",
        "local-demand-signals",
        "research-partnership-opportunities",
        "verified-field-work",
        "buyer-signal-intelligence"
      ],
      "type": "string",
      "description": "Exact published-intelligence product key from get_published_intelligence_catalog. Select the product whose representative paid-eligible sample you want to inspect."
    }
  }
}
get_free_data_sample
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free, read-only preview of one canonical PaidHandshake inventory feed. Returns one paid-eligible verified record when available; quality-held candidates are never substituted. Use get_live_inventory first to discover feed inventory and use get_published_intelligence_sample instead for worker-published intelligence products.

get_free_data_sample input schema
{
  "type": "object",
  "required": [
    "feed"
  ],
  "properties": {
    "feed": {
      "enum": [
        "rfp-procurement",
        "business-buyer-intent",
        "vendor-product-pricing",
        "local-service-availability",
        "grants-funding",
        "business-expansion-permits",
        "jobs-contract-work"
      ],
      "type": "string",
      "description": "PaidHandshake feed slug"
    }
  }
}
get_free_data_sample annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_matches
Advertised by the server during the last successful anonymous check.

Read-only discovery search across current public or authorized web information when the request is not already covered by a known PaidHandshake inventory product. Returns one evidence-bearing proof result, locked ranked previews, pricing, and a reusable search_id. Use get_live_inventory/get_free_data_sample for known inventory products instead, and use quote_paid_machine_job for delegated custom research work.

search_matches input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 600,
      "minLength": 3,
      "description": "Natural-language discovery request, 3-600 characters. Include meaningful constraints such as location, timing, budget, product/service type, opportunity type, or other criteria needed to rank relevant current results."
    }
  }
}
get_unlock_quote
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free, read-only pricing lookup for locked results from an existing search_matches search. Returns the currently available unlock packages and prices for the supplied search_id without creating checkout or charging the buyer. Use create_checkout only after a buyer chooses a package; use search_matches first if you do not yet have a search_id.

get_unlock_quote input schema
{
  "type": "object",
  "required": [
    "search_id"
  ],
  "properties": {
    "search_id": {
      "type": "string",
      "description": "Reusable PaidHandshake search identifier returned by search_matches. Pass the exact search_id whose currently available result-unlock packages and prices you want to inspect."
    }
  }
}
get_unlock_quote annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_checkout
Advertised by the server during the last successful anonymous check.

Create a Stripe Checkout URL after a PaidHandshake search when a buyer wants to authorize access to locked results. This tool only creates the checkout handoff and never silently charges the buyer. Use get_unlock_quote first if the buyer only needs pricing, and do not use this for recurring watches or machine-wallet jobs.

create_checkout input schema
{
  "type": "object",
  "required": [
    "search_id",
    "package"
  ],
  "properties": {
    "package": {
      "enum": [
        "single",
        "top3",
        "full"
      ],
      "type": "string",
      "description": "Result package to purchase: single unlocks one selected result, top3 unlocks the next three ranked results, and full unlocks the full available result pack."
    },
    "result_id": {
      "type": "integer",
      "description": "Required only when package=single. Use the result identifier from the locked preview returned by search_matches."
    },
    "search_id": {
      "type": "string",
      "description": "Reusable search identifier returned by search_matches for the result set being purchased."
    }
  }
}
quote_paid_machine_job
Advertised by the server during the last successful anonymous check.

Free, read-only price estimate for delegated machine work before any job is submitted or money is reserved. Use this for custom public-web research, sourcing, verification, or commercial-intelligence tasks; after accepting the quote, use submit_paid_machine_job for execution. Unknown task labels may be mapped to a compatible live-worker capability.

quote_paid_machine_job input schema
{
  "type": "object",
  "required": [
    "task_type"
  ],
  "properties": {
    "task_type": {
      "type": "string",
      "description": "Requested work category or intent label, such as event_search, bid_search, vendor_search, grant_search, deep_research, or another descriptive task label."
    },
    "constraints": {
      "type": "object",
      "description": "Optional task-specific requirements such as location, date range, maximum results, verification requirements, exclusions, budget, or other execution constraints used to estimate the job."
    }
  }
}
get_machine_payment_options
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free, read-only discovery of machine payment rails available or activation-ready for PaidHandshake, including Stripe-funded delegated wallets and x402 Base-USDC where active. Use this when an autonomous buyer needs to choose how to pay; use get_machine_wallet to inspect one authenticated machine's actual wallet balance and spending limits.

get_machine_payment_options input schema
{
  "type": "object",
  "properties": {}
}
get_machine_payment_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_machine_onboarding
Advertised by the server during the last successful anonymous check.

Free, read-only onboarding guide for autonomous buyers. Returns the self-service machine enrollment route plus Stripe wallet-funding, paid-job submission/polling, recurring-watch, and related machine endpoints. Use this when an agent needs to become a PaidHandshake machine buyer or discover the required API flow; use get_machine_wallet after authentication to inspect an existing machine account.

get_machine_onboarding input schema
{
  "type": "object",
  "properties": {}
}
submit_paid_machine_job
Advertised by the server during the last successful anonymous check.
Open-world

Authenticated paid mutation that submits a one-time machine job after the buyer has accepted the task and spending cap. PaidHandshake authorizes work only inside the machine's delegated wallet and platform spending limits, routes it to a compatible worker capability, and returns a job_id for later polling with get_paid_machine_job. Use quote_paid_machine_job first when the price is not yet known; use create_recurring_paid_watch instead for repeated work.

submit_paid_machine_job input schema
{
  "type": "object",
  "required": [
    "query",
    "max_price_cents"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 1200,
      "minLength": 3,
      "description": "Natural-language task to execute. Include the desired outcome and important location, timing, scope, evidence, filtering or result requirements."
    },
    "task_type": {
      "type": "string",
      "description": "Optional routing label describing the work category or intent. Use a descriptive capability label when known; otherwise PaidHandshake can route compatible work from the request."
    },
    "constraints": {
      "type": "object",
      "description": "Optional structured task requirements such as location, date range, maximum results, verification requirements, exclusions, budget or other execution limits."
    },
    "idempotency_key": {
      "type": "string",
      "description": "Optional caller-generated stable key for the same intended paid submission. Reuse the same key when retrying an uncertain request so an accidental duplicate job can be avoided."
    },
    "max_price_cents": {
      "type": "integer",
      "minimum": 1,
      "description": "Maximum amount in USD cents this machine authorizes for this single job. The request remains subject to delegated wallet, per-call, daily, monthly and platform spending limits."
    }
  }
}
submit_paid_machine_job annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_paid_machine_job
Advertised by the server during the last successful anonymous check.

Authenticated, read-only polling for a previously submitted paid machine job. Use the job_id returned by submit_paid_machine_job to retrieve its current queued, working, completed, or failed state and any available result; use quote_paid_machine_job before submission, not this tool, when you only need a price estimate.

get_paid_machine_job input schema
{
  "type": "object",
  "required": [
    "job_id"
  ],
  "properties": {
    "job_id": {
      "type": "string",
      "description": "PaidHandshake job identifier returned by submit_paid_machine_job. Pass the exact job_id for the authenticated machine account whose status or completed result you want to retrieve."
    }
  }
}
create_recurring_paid_watch
Advertised by the server during the last successful anonymous check.

Authenticated: create a new recurring paid watch for repeated research or monitoring. Each execution is a normal paid machine job bounded by max_price_cents plus the machine's delegated spending limits; cadence must be 60-10080 minutes. Use this only to create a new watch; use set_recurring_paid_watch to enable/disable an existing watch and submit_paid_machine_job for one-time work.

create_recurring_paid_watch input schema
{
  "type": "object",
  "required": [
    "query",
    "max_price_cents"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Optional human-readable label for the watch."
    },
    "query": {
      "type": "string",
      "description": "The recurring research or monitoring request to execute on each scheduled run."
    },
    "task_type": {
      "type": "string",
      "description": "Optional execution category used to route each run to a compatible worker; omit when the query itself is sufficient for routing."
    },
    "constraints": {
      "type": "object",
      "description": "Optional reusable execution constraints applied to every run, such as location, filters, maximum results, verification requirements, or exclusions."
    },
    "cadence_minutes": {
      "type": "integer",
      "maximum": 10080,
      "minimum": 60,
      "description": "Minutes between scheduled runs. Minimum 60 minutes; maximum 10080 minutes (7 days)."
    },
    "max_price_cents": {
      "type": "integer",
      "minimum": 1,
      "description": "Maximum price in USD cents allowed for each individual run before the job is rejected rather than overspending."
    },
    "run_immediately": {
      "type": "boolean",
      "description": "If true, request an initial run immediately after watch creation; if false or omitted, wait for the normal cadence."
    }
  }
}
list_recurring_paid_watches
Advertised by the server during the last successful anonymous check.
Advertised read-only

Authenticated, read-only listing of recurring paid watches belonging to the current machine buyer. Returns the buyer's saved watches and their current identifiers, configuration and enabled status. Use this to obtain a watch_id before set_recurring_paid_watch; use create_recurring_paid_watch to create a new watch.

list_recurring_paid_watches input schema
{
  "type": "object",
  "properties": {}
}
list_recurring_paid_watches annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
set_recurring_paid_watch
Advertised by the server during the last successful anonymous check.

Authenticated state change for an existing recurring paid watch. Set enabled=true to allow future scheduled runs under the watch's saved cadence and spending limits, or enabled=false to stop future runs; this does not create a watch or edit its query. Use create_recurring_paid_watch to create one and list_recurring_paid_watches to obtain an existing watch_id.

set_recurring_paid_watch input schema
{
  "type": "object",
  "required": [
    "watch_id",
    "enabled"
  ],
  "properties": {
    "enabled": {
      "type": "boolean",
      "description": "true enables future scheduled executions; false disables future scheduled executions for this watch."
    },
    "watch_id": {
      "type": "string",
      "description": "Existing recurring watch identifier, typically returned by create_recurring_paid_watch or list_recurring_paid_watches."
    }
  }
}
get_machine_wallet
Advertised by the server during the last successful anonymous check.
Advertised read-only

Authenticated, read-only wallet status for the current machine buyer. Returns wallet balance and delegated spending limits without moving funds. Use this before submit_paid_machine_job to verify available budget; use get_machine_payment_options to discover funding and payment rails rather than account-specific balances.

get_machine_wallet input schema
{
  "type": "object",
  "properties": {}
}
get_machine_wallet annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_paidhandshake_capabilities
Advertised by the server during the last successful anonymous check.
Advertised read-only

Free, read-only capability map for PaidHandshake Exchange. Returns available verified-data feed families, machine endpoints, payment rails, and operating rules. Use this first to understand what PaidHandshake can do; use get_machine_onboarding for enrollment and setup, and get_machine_wallet for an authenticated buyer's current balance and spending limits.

get_paidhandshake_capabilities input schema
{
  "type": "object",
  "properties": {}
}
get_paidhandshake_capabilities annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1272 ms
95th percentile latency
1272 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1272 ms · metadata changed · 18 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http paidhandshake-exchange-mcp https://paidhandshake.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add paidhandshake-exchange-mcp --url https://paidhandshake.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable paidhandshake-exchange-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "paidhandshake-exchange-mcp": {
      "url": "https://paidhandshake.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "paidhandshake-exchange-mcp": {
      "type": "streamableHttp",
      "url": "https://paidhandshake.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start paidhandshake-exchange-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "paidhandshake-exchange-mcp": {
      "type": "http",
      "url": "https://paidhandshake.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http paidhandshake-exchange-mcp https://paidhandshake.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://paidhandshake.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "paidhandshake-exchange-mcp": {
      "serverUrl": "https://paidhandshake.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like PaidHandshake Exchange MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run PaidHandshake Exchange MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing