Nevermined Catalog
What this MCP does
Discovers catalogued paid services, quotes and executes calls, and manages spend-capped crypto-backed payment delegations.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'delegationId': {'type': 'string', 'description': 'A specific delegation to read (every paid pay_service result carries one). Omit it to read the budget pay_service spends by default.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['paymentId'], 'properties': {'paymentId': {'type': 'string', 'format': 'uuid', 'description': 'The `paymentId` a pay_service result returned.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'The service slug (from search_services).'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'ISO-8601 upper bound on `createdAt`, inclusive. An unparseable value is an error.'}, 'from': {'type': 'string', 'description': 'ISO-8601 lower bound on `createdAt`, inclusive. An unparseable value is an error.'}, 'delegationId': {'type': 'string', 'description': 'Only payments charged to this delegation.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'ISO-8601 upper bound on `createdAt`, inclusive. An unparseable value is an error.'}, 'from': {'type': 'string', 'description': 'ISO-8601 lower bound on `createdAt`, inclusive. An unparseable value is an error.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'body': {'description': 'Request payload sent to the vendor.'}, 'path': {'type': 'string', 'description': "Router suffix appended to the service base. Read `get_service`'s `requestShape.endpoints[].payServiceArgs.path`: a checked `invokePath` may be empty even when the display path is not. Replace every `pathParams` placeholder. Put query parameters in `search`, never in `path`."}, 'slug': {'type': 'string', 'minLength': 1, 'description': 'The service slug to pay for.'}, 'fresh': {'type': 'boolean', 'description': "Set true on every POLL of an async status endpoint, including the first: each call mints a fresh idempotency key so the poll advances, instead of later polls reusing the derived key and getting the first poll's stored answer (or, before API 1.48, `already_paid`) back. Trade-off: with `fresh` a retry is NOT de-duplicated and WILL be charged again — use it to advance a poll, never to retry a call whose outcome you are unsure of. Leave unset for ordinary calls so a genuine retry stays idempotent. Ignored when you pass an explicit requestId."}, 'method': {'type': 'string', 'description': 'HTTP method for the vendor call. Omit to use the method the catalog records for the endpoint matching `path`; falls back to POST when the catalog records none.'}, 'search': {'type': 'string', 'description': 'Query string without ?, for a slug-routed GET (e.g. flight_iata=AA217).'}, 'headers': {'type': 'object', 'description': 'Extra headers for the vendor call.', 'additionalProperties': {'type': 'string'}}, 'quoteId': {'type': 'string', 'description': 'Opaque short-lived quote id returned by quote_service. Pass it only with the exact same call before expiresAt; the Router then pays the cached challenge and exact fee-inclusive total. Keep maxTotalCents as an independent ceiling.'}, 'requestId': {'type': 'string', 'description': 'Idempotency key. Leave unset — a retry of the same call is de-duplicated automatically. Only set a NEW value if you intend a genuinely separate, additional charge. To poll an async status endpoint, prefer `fresh: true` over minting your own value.'}, 'delegationId': {'type': 'string', 'description': "Delegation to charge when you authenticate with an API key; defaults to your active one. An OAuth-connected caller always spends from the grant it approved, so a value here does not choose the delegation; it still feeds the derived idempotency key when you omit `requestId`, so keep it the same across retries of one call. The result's `delegationId` names the delegation actually charged."}, 'maxTotalCents': {'type': 'integer', 'minimum': 0, 'description': 'Maximum whole cents this call may cost, including the buyer fee (compared exactly, so rounding alone never exceeds it). The price the service quotes on its 402 can differ from the catalog price label.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'body': {'description': 'The request payload you would send; some services price by it.'}, 'path': {'type': 'string', 'description': "The same `path` you would pass to pay_service: read `get_service`'s `requestShape.endpoints[].payServiceArgs.path` and replace every `pathParams` placeholder. Put query parameters in `search`."}, 'slug': {'type': 'string', 'minLength': 1, 'description': 'The service slug to quote.'}, 'method': {'type': 'string', 'description': 'HTTP method. Omit to use the method the catalog records for the endpoint matching `path` (POST when it records none), exactly as pay_service does.'}, 'search': {'type': 'string', 'description': 'Query string without ?, for a slug-routed GET (e.g. flight_iata=AA217).'}, 'headers': {'type': 'object', 'description': 'The extra headers you would send to the vendor.', 'additionalProperties': {'type': 'string'}}, 'delegationId': {'type': 'string', 'description': 'The delegation you would pay with, when you authenticate with an API key; defaults to the one pay_service would use. A card or organization-wallet delegation can select a different rail, and so a different price. An OAuth-connected caller is always quoted for the grant it approved, so a value here does not choose the delegation; the result names the one priced.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['intent'], 'properties': {'body': {'description': 'Request body for the paid call (autoPay only).'}, 'path': {'type': 'string', 'description': 'Subpath appended to the winner when paying (autoPay only).'}, 'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Shortlist size to return (1–20, default 5).'}, 'intent': {'type': 'string', 'minLength': 1, 'description': 'Plain-language description of the service you need (e.g. "translate English to German").'}, 'method': {'type': 'string', 'description': 'HTTP method for the paid call (autoPay only).'}, 'search': {'type': 'string', 'description': 'Query string (no leading ?) for the paid call (autoPay only).'}, 'autoPay': {'type': 'boolean', 'description': 'When true, also pay and relay the winner in the same call (same path as pay_service); requires requestId, plus delegationId when you authenticate with an API key. Default false → return the pick only, no charge.'}, 'filters': {'type': 'object', 'properties': {'prefer': {'type': 'string', 'minLength': 1, 'description': 'Prefer this exact opaque catalog slug when it is a payable match; otherwise keep the normal ranked fallback.'}, 'exclude': {'type': 'string', 'minLength': 1, 'description': 'Never choose this exact opaque catalog slug.'}, 'network': {'type': 'string', 'description': 'Narrow to a settlement network.'}, 'require': {'type': 'string', 'minLength': 1, 'description': 'Require this exact opaque catalog slug. It is returned only if payable and healthy; otherwise the Router fails closed with BCK.ROUTER.0031 and never substitutes another service.'}, 'category': {'type': 'string', 'description': 'Narrow to services carrying this catalog tag. It matches tags, not the category names `list_categories` returns (those are not stored as tags and match nothing) — put a category name in `intent` instead.'}, 'protocol': {'enum': ['x402', 'mpp'], 'type': 'string', 'description': 'Narrow to a payment protocol (only x402 and mpp are payable).'}, 'maxPriceLabel': {'type': 'string', 'description': 'Upper price bound as a label (e.g. "$0.05"); best-effort.'}}, 'description': 'Optional structured narrowing; all fields optional.', 'additionalProperties': False}, 'headers': {'type': 'object', 'description': 'Extra headers for the paid call (autoPay only).', 'additionalProperties': {'type': 'string'}}, 'requestId': {'type': 'string', 'description': 'Idempotency key — REQUIRED when autoPay is true.'}, 'delegationId': {'type': 'string', 'description': 'Delegation to charge on autoPay. Required when you authenticate with an API key; an OAuth-connected caller spends from the grant it approved, so it can omit this (a value there does not choose the delegation).'}, 'maxTotalCents': {'type': 'integer', 'minimum': 0, 'description': 'Refuse a paid quote above this (fee-inclusive), before purchase (autoPay only).'}, 'credentialHeader': {'type': 'string', 'description': 'Header the Router should carry the minted payment credential in on the paid hop (autoPay only). Send it only when the winning service needs its own auth AND a payment credential (e.g. "Payment"). Ignored when autoPay is false.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'tag': {'type': 'string', 'description': "Restrict to services carrying this catalog tag (e.g. a protocol or domain keyword from a listing's `tags`). Combined with `category` it widens the match to either value rather than narrowing it."}, 'query': {'type': 'string', 'minLength': 1, 'description': 'What you need, in plain language. REQUIRED. Ranked semantically AND lexically (hybrid), most relevant first — a query describing the need ("translate documents to German") matches on meaning, not only exact words, and also keyword-matches title, descriptions and tags. Falls back to keyword-only ranking when the embedding provider is unavailable.'}, 'prefer': {'type': 'string', 'minLength': 1, 'description': 'Move this opaque catalog slug to the front when it matched the returned page; if it did not match, keep the normal ranked fallback.'}, 'exclude': {'type': 'string', 'minLength': 1, 'description': 'Never return this opaque catalog slug in the result page.'}, 'category': {'type': 'string', 'description': 'Restrict to services carrying this catalog tag — it filters on tags exactly like `tag`. The category names `list_categories` returns are not stored as tags, so passing one here matches nothing; put a category name in `query` instead. Given together, `category` and `tag` match a service carrying either one.'}, 'pageSize': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size, 1–100 (a size of 0 is meaningless and is rejected).'}, 'protocol': {'enum': ['x402', 'mpp', 'rest', 'a2a', 'other'], 'type': 'string', 'description': 'Restrict to a payment protocol. Only x402 and mpp are payable via the Router.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'returnUrl': {'type': 'string', 'description': "Where the human's browser should land after they authorise. Only a localhost callback (http://127.0.0.1:<port>/…) or an origin this Nevermined deployment has allow-listed is accepted; a rejected value is reported back rather than silently dropped. OMIT THIS unless you actually have somewhere to receive the redirect — without it the page just shows a confirmation and the human closes the tab, which is the normal case in a chat host. Validated by the Nevermined API rather than here, deliberately: a second validator in this schema could refuse a URL the API would have accepted."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'network': {'type': 'integer', 'description': "Chain id to read. OMIT IT to see every network this deployment serves, which is what you want unless the merchant already told you which chain it settles on. A chain id this deployment does not serve is not refused: the result then lists the deployment's primary network (its own chain id, not the one you asked for) with a `warning` saying the requested chain is not served, so those balances say nothing about the chain you asked about.", 'exclusiveMinimum': 0}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
SAP MCP Server
Provides an MCP gateway connecting SAP-related tools with Solana, DeFi, decentralized identity, and x402 payments.
Wisely x402 Agent-Payment Infrastructure
Provides agent payment workflows for x402 endpoints, wallet handoffs, receipts, creator catalogs, local commerce bridges, endpoin…
Finance Ops — Report Review — Northgate Advisors (f72b2bd5)
Runs a synthetic finance-report review benchmark and provides agent marketplace discovery, paid work, data purchases, and testnet…
Accounts Payable — Freight Bill Screen — Verdant Springs Services Group (8d42472e)
Runs a synthetic freight-bill benchmark and provides agent marketplace discovery, paid work, data purchases, and testnet USDC esc…
Accounts Payable — Invoice Reconcile — Verdant Springs Services Group (9888f269)
Runs a synthetic invoice-reconciliation benchmark and provides agent marketplace discovery, paid work, data purchases, and testne…
AgentPay — trust routing + spend caps for x402 agents
Routes agents to vetted x402 tools, estimates costs, enforces spend-capped sessions, and provides crypto market, security, and we…
A2AWire
Supports agent discovery, hiring, escrow-funded task execution, reputation, earnings, and USDC payments for agent-to-agent commer…
basebalance.cloud — x402 RPC & MCP gateway
Provides a USDC-gated Base JSON-RPC and MCP gateway with usage-based billing, failover, caching, and a ledger.