Brand Design Ltd.
Server Details
AI agents discover and order Brand Design services, including the 101Ts3t real-payment test.
- Status
- Healthy
- Uptime
- 100.0% over 25 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 10 tools
Each tool targets a distinct action or resource: registration, catalogue/manifest reads, order creation/status, offer acceptance, payment start, and three separate KYA operations. The KYA challenge/verify/status tools are clearly differentiated by mutate/read semantics, and catalog vs manifest serve different discovery purposes.
The set is consistently snake_case and mostly follows a verb_noun pattern (accept_offer, create_order, start_payment, register_agent). Minor deviations exist for read-only tools like catalog, manifest, and order_status, which use bare nouns or noun phrases rather than a verb.
Ten tools is well-scoped for an agent commerce protocol covering registration, discovery, ordering, offer acceptance, payment, and KYA. No tool appears redundant or trivial, and the set is neither too thin nor bloated.
The surface covers the core lifecycle: register agent, read catalogue/manifest, create order, accept offer, start payment, and check status, plus full KYA challenge/verify/status. Minor gaps include no explicit cancel/refund or order-history/list operations, but primary agent workflows are supported.
Available Tools
10 toolsaccept_offerIdempotentInspect
Accept the offer on behalf of the buyer. Needs credentials. This locks the billing identity, the offer version and the hash of the terms as they stand at this moment. A later change to the website cannot pass for what was agreed. Errors: OFFER_CHANGED (409) if the offer or the terms changed since you read them; read order_status and use the new values. OFFER_EXPIRED (409) 30 days after the order. MANUAL_OFFER_REQUIRED (409) while a person has not priced the service yet.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order id returned by create_order. | |
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| billing | Yes | The buyer as it will appear on the invoice and the contract. For type company, company, registration and representative are also required. For type person, leave out company, registration, vat and representative. No other keys are accepted. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. | |
| termsHash | Yes | SHA-256 of the terms page in the language of the order: offer.terms.<language>.hash from the order, copied exactly. Sending it confirms that the buyer accepts those terms. | |
| accessToken | Yes | The accessToken returned by create_order. | |
| offerVersion | Yes | offer.version from the order, copied exactly. | |
| immediateStart | No | Natural persons only: true when the buyer expressly asks the work to start within the 14-day withdrawal period and acknowledges losing the right of withdrawal once the service is fully performed. |
catalogARead-onlyInspect
Read the service catalogue: names, prices, currency and terms. No credentials needed. All amounts are integers in the minor unit; 100000 means 1000.00 EUR.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'No credentials needed.' It adds valuable behavioral context beyond the annotation: the integer minor-unit convention (100000 means 1000.00 EUR) and the explicit statement that no authentication is required. This is useful for an agent deciding whether to call this tool without setup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information: what the catalogue contains, that no credentials are needed, and the integer minor-unit convention. No filler, no repetition of the schema, and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description is nearly complete. It covers the resource, the data fields, the currency format, and the authentication requirement. The only minor gap is that it doesn't describe the exact response structure (e.g., whether it's a list or object), but with no output schema and a simple catalogue read, this is a small omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. The description adds meaning by explaining the return semantics (integer minor units, currency), which is the only parameter-like ambiguity an agent might face. With 0 params, the baseline is 4, and the description earns it by clarifying the data format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('service catalogue'), and enumerates exactly what the catalogue contains: names, prices, currency, and terms. This clearly distinguishes it from the sibling tools, which are all action-oriented (accept_offer, create_order, start_payment) or status-related (order_status, manifest).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly signals when to use this tool: when an agent needs catalogue data (names, prices, currency, terms) before making decisions like creating an order or starting a payment. It doesn't explicitly name alternatives or exclusions, but the read-only nature and the sibling set make the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_orderAInspect
Place an order for a service. Needs credentials. Returns the order id, the offer and an accessToken you must keep for the following calls. The offer is pinned to the hash of the service page; accept_offer needs offer.version and offer.terms..hash from it. Services without a catalogue price return an offer with no total and wait for a person to price it. Errors: MISSING_ when a required brief field is absent, UNEXPECTED_FIELD when the brief has a key the service does not declare.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | Required MCP argument: send an object, including {} when the selected service has no required brief fields. Direct REST may omit brief and treats that as {}; required catalog fields remain mandatory. One string per field the catalogue lists under this service in catalog.services.<service>.fields. Use each field id as the key. Fields with required: true must be present; the max value is the length limit. No other keys are accepted. | |
| lines | No | Only for services that have catalog.services.<service>.configurator. One entry per item: item is an id from configurator.items; qty is the number of designs, or the number of pages when the item has per "page", within item.qty min and max; options maps every option id of the item to one of its value ids; note is free text, required when the item has noteRequired. The price is computed by the seller from the catalogue; never send a price. If any chosen item has price null, the order waits for a person to price it. | |
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| service | Yes | Service id: one of the keys of catalog.services, as returned by the catalog tool. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. | |
| language | No | Language of the offer, the terms and the documents. This MCP adapter defaults to en; direct REST requires payload.language explicitly. | en |
| printQuote | No | Only with lines: the buyer would like a print quote once the design work has started. Printing is not part of this order. | |
| idempotencyKey | No | Your own stable key, 16-100 characters, so a repeated call does not create a second order. If omitted this MCP adapter generates a new key for each invocation; provide and reuse a key for retries. Direct REST always requires idempotencyKey. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only, non-idempotent and non-destructive, and the description adds substantial context beyond them: the auth requirement, that the caller must retain accessToken for follow-up calls, that the offer is hash-pinned, that some orders stall awaiting human pricing, and the MISSING_<field>/UNEXPECTED_FIELD error contract. The idempotencyKey explanation is consistent with idempotentHint=false (retries need a reused key) rather than contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: purpose first, then return contract, then pricing edge case, then error codes. Every sentence carries information, though the back half is run-on and could be split for scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by describing the return values (order id, offer, accessToken and its retention requirement). Combined with the error contract, idempotency guidance and human-pricing branch for an 8-parameter, nested-schema tool, it covers what an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented in the schema; baseline is 3. The description adds only marginal param detail (brief field-absence errors, language default, offer.terms.<language>.hash linkage), so it does not clearly exceed the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Place an order for a service') and immediately distinguishes it from siblings by describing the offer/accessToken handoff that feeds accept_offer. An agent can tell it apart from order_status, start_payment and accept_offer without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear sequencing context: credentials are needed (pointing to register_agent), the returned offer fields are what accept_offer consumes, and services with no catalogue price wait for a human. It does not state explicit when-not or compare against a sibling like accept_offer/order_status directly, but the workflow conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kya_challengeAInspect
Issue a fresh DNS TXT challenge for your currently authenticated agent identity. Needs commerce.order for OAuth. Supply an HTTPS contact URL on a domain you control, especially on the first OAuth connection. Omitting contact reuses the current contact. This replaces the previous challenge and clears its verification. Publish the returned txtValue at dnsName, then call kya_verify. Domain control does not establish buyer identity or grant spending authority. Do not publish secrets in DNS.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| contact | No | HTTPS URL on your own public domain. No IP address, credentials, custom port or URL fragment. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose non-read-only, non-idempotent behavior, but the description adds crucial context: this replaces the previous challenge and clears its verification, requires domain control, and warns about not publishing secrets. These details go well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, front-loading the core action and sequencing. Each sentence adds distinct operational value, though slightly more compact phrasing could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the full workflow: issuance prerequisites, contact URL requirements, replacement behavior, next steps (publish TXT, then kya_verify), and security constraints. With no output schema, it sufficiently explains the expected return (txtValue at dnsName). Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already explains parameters thoroughly, but the description adds practical guidance: contact is optional and reuses existing when omitted, and it is especially recommended on first OAuth connection. It also implicitly explains that secret and clientId are authentication alternatives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (issue a fresh DNS TXT challenge) scoped to the authenticated agent identity. The description clearly distinguishes this from siblings like kya_verify and kya_status by naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites (commerce.order scope, OAuth, HTTPS contact URL on controlled domain), states the default when contact is omitted, and directly instructs to call kya_verify next. It also clearly excludes identity/spending implications, preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kya_statusARead-onlyInspect
Read DNS domain-control verification for your currently authenticated agent. Needs commerce.read for OAuth. Returns verification status and, when present, DNS instructions and validity timestamps. This does not change the contact, challenge or verification.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description is consistent with them rather than repeating them. It adds genuinely new behavioral context: the OAuth scope required and what comes back (status plus DNS instructions and validity timestamps when present). It does not cover error behavior or what an unverified state returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, auth prerequisite, return contract, and a non-mutation disclaimer. The core purpose is front-loaded in the first clause with no preamble.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description supplies the missing pieces: the OAuth scope needed to call it, the shape of the returned data, and confirmation that nothing is mutated. An agent has everything required to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (secret, clientId) are documented in-schema, including the Bearer header alternative. The description adds nothing about parameter form or precedence, which is acceptable given the schema does the heavy lifting, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read DNS domain-control verification') scoped to 'your currently authenticated agent', which is far more precise than a bare name restatement. It stops short of naming the sibling alternatives (kya_challenge, kya_verify) explicitly, so the contrast with them must be inferred from the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('Needs commerce.read for OAuth') and a negative boundary ('does not change the contact, challenge or verification'), which tells the agent this is not the tool for mutating verification state. It never names which sibling to use instead when the agent wants to trigger a challenge or verify, so routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kya_verifyAInspect
Check the DNS TXT challenge for your currently authenticated agent and record domain-control verification. Needs commerce.order for OAuth. First call kya_challenge and publish its exact DNS TXT record. The response gives verifiedAt and validUntil; verification is currently valid for 24 hours. This does not authorize a purchase or a payment.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds real behavioral context the annotations lack: the return fields verifiedAt/validUntil and the 24-hour validity window. It does not say what happens on a failed or repeated verification, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the operation, then prerequisites, then outcome and the authorization disclaimer. Every sentence carries distinct information; nothing is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names verifiedAt and validUntil and the validity duration, and it states the prerequisite sequence and non-authorization boundary. It omits failure modes (e.g., what a TXT mismatch returns), which is the only remaining gap for a verification tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both secret and clientId are thoroughly documented there, including the Authorization-header alternative. The description mentions authentication only obliquely ('currently authenticated agent') and adds no parameter detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Check the DNS TXT challenge ... and record domain-control verification' for the currently authenticated agent. It is clearly distinguishable from the sibling kya_challenge, which it names as the prerequisite step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit prerequisites (OAuth scope commerce.order, and 'First call kya_challenge and publish its exact DNS TXT record') and an explicit boundary ('This does not authorize a purchase or a payment'). An agent knows the ordering and the scope of the operation without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manifestARead-onlyInspect
Read the commerce manifest: protocol, endpoints, authentication scheme, payment instrument and limits. No credentials needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with a read-oriented verb. It adds meaningful context beyond the annotation by stating 'No credentials needed,' clarifying authentication expectations and reducing the perceived need for setup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core purpose and content scope are front-loaded, and the credential note is a useful standalone addition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool, the description covers purpose, scope, and authentication expectations. Since there is no output schema, the enumerated content list effectively communicates what the agent can expect to learn from the manifest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to explain. The baseline for a no-parameter tool is 4, and the description adequately conveys that no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb 'Read' with the resource 'commerce manifest' and enumerates the contained information: protocol, endpoints, authentication scheme, payment instrument, and limits. This clearly differentiates it from sibling action tools like create_order and start_payment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: to obtain protocol, endpoint, authentication, and payment-limit details before taking action. It adds the practical note that no credentials are needed, which helps the agent decide it can be called without auth setup, though it does not explicitly contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_statusARead-onlyInspect
Read the current state of the order, its offer and its payments, including the invoice number once one has been issued. Needs credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order id returned by create_order. | |
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. | |
| accessToken | Yes | The accessToken returned by create_order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read'. It adds the credential requirement ('Needs credentials') and the conditional invoice number behavior ('once one has been issued'), which are not in the annotations. This provides useful behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary purpose is front-loaded, and the credential note is a necessary caveat. Every word earns its place; nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality, the authentication requirement, and the conditional invoice inclusion. It does not describe the return format or error behavior, but with no output schema and a simple read operation, these are not critical. The tool is adequately described for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (order, secret, clientId, accessToken) is already documented in the schema. The description does not add any additional meaning or clarify parameter usage beyond what the schema provides. It adheres to the baseline without adding value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('the order'), and explicitly enumerates the scope: offer, payments, and invoice number. This clearly distinguishes it from sibling tools like create_order, start_payment, and accept_offer, which are all mutations. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it obvious this tool is for reading order status, and its read-only nature contrasts with the mutation siblings. However, it does not explicitly name alternatives or state when not to use it (e.g., 'use manifest for product details'). There is no exclusion guidance, so the usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_agentAInspect
Register yourself and receive a client identifier and a secret. No approval and no prior arrangement. The secret is returned once and cannot be recovered. Put them in the Authorization header as "Bearer :" for the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Your name, 2 to 80 characters. | |
| contact | Yes | A https:// or mailto: URL at which a human can reach whoever runs you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the critical one-time secret behavior: 'The secret is returned once and cannot be recovered.' It also explains how the returned credentials must be sent in the Authorization header, which is important context the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct value: the result, the lack of prerequisites, the one-time secret warning, and how to use the credentials. It is entirely front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, it states the return contract — 'a client identifier and a secret' — and exactly how to consume those values in later calls. For a two-parameter registration tool, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both required parameters have clear descriptions in the schema. The description itself adds no parameter-level detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Register yourself,' and names the exact deliverable: 'a client identifier and a secret.' This clearly distinguishes it from the sibling commerce tools, establishing it as the auth-registration step rather than a domain operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes when to call this tool by saying the credentials are used 'for the other tools' and that 'no approval and no prior arrangement' are needed. There is no explicit exclusion, but it clearly implies this is the first step before using any sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_paymentADestructiveInspect
Start payment for a stage. Needs credentials. Without sharedPaymentToken you receive a hosted payment session, which you may complete yourself with a payment instrument issued to you, or hand to the person you act for. With a delegated shared payment token the payment settles directly. A self-registered agent must first have current DNS domain-control KYA for its HTTPS contact domain: call kya_challenge with a domain you control, publish its DNS TXT record and call kya_verify; kya_status reads the current verification. KYA does not grant buyer payment authority. On-chain payment is not accepted. Errors: OFFER_EXPIRED (409) for an advance after 30 days, FINAL_NOT_RELEASED (409) when the final payment is not open yet, PAYMENTS_DISABLED (503).
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order id returned by create_order. | |
| stage | No | advance: the first payment, open after accept_offer. It is 50% of the total, or the whole total when the service is paid at once (paymentPlan single in the catalogue). final: the remaining 50%, open only after the advance is paid and the seller has released the work for final payment. Defaults to advance. | |
| secret | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent. | |
| clientId | No | Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent. | |
| accessToken | Yes | The accessToken returned by create_order. | |
| sharedPaymentToken | No | Only for delegated payment without a hosted page: a Stripe shared payment token granted to the seller profile in manifest.payment.networkBusinessProfile. Leave it out to receive a hosted payment session instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/non-idempotent/openWorld, and the description goes well beyond them: credential requirement, the two settlement paths, the KYA DNS precondition sequence, the on-chain rejection, and named error codes with HTTP statuses (OFFER_EXPIRED 409, FINAL_NOT_RELEASED 409, PAYMENTS_DISABLED 503). This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then conditions, then prerequisites, then errors — a sensible ordering. It is dense and slightly long, but nearly every clause carries operational meaning (auth, KYA sequencing, error codes) rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden: it explains what a hosted session is and that a delegated token settles directly, and enumerates failure modes. It stops short of describing the concrete response payload (session handle/URL, settlement identifiers) an agent would need to continue the flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: the hosted-session consequence of omitting sharedPaymentToken and the delegation model behind it. It does not add timing or formatting detail for order/accessToken, hence not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (start payment for a stage) and immediately splits the behavior into two mutually exclusive modes: hosted session vs delegated token settlement. It also names the KYA prerequisite tools (kya_challenge, kya_verify, kya_status), so an agent can place it relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when each mode applies: omitted sharedPaymentToken yields a hosted session, a delegated token settles directly. It also states the precondition chain for self-registered agents (DNS domain-control KYA before payment) and the negative constraint that KYA does not grant buyer payment authority.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
accept_offer1 field changed- added
Input schema / properties / immediateStartAdded value: +{ + "description": "Natural persons only: true when the buyer expressly asks the work to start within the 14-day withdrawal period and acknowledges losing the right of withdrawal once the service is fully performed.", + "type": "boolean" +}
4 tool updates
- Changed
create_order4 fields changed- changed
Input schema / properties / brief / descriptionPrevious value: -"One string per field the catalogue lists under this service in catalog.services.<service>.fields. Use each field id as the key. Fields with required: true must be present; the max value is the length limit. No other keys are accepted."New value: +"Required MCP argument: send an object, including {} when the selected service has no required brief fields. Direct REST may omit brief and treats that as {}; required catalog fields remain mandatory. One string per field the catalogue lists under this service in catalog.services.<service>.fields. Use each field id as the key. Fields with required: true must be present; the max value is the length limit. No other keys are accepted." - changed
Input schema / properties / idempotencyKey / descriptionPrevious value: -"Your own key, so a repeated call does not create a second order."New value: +"Your own stable key, 16-100 characters, so a repeated call does not create a second order. If omitted this MCP adapter generates a new key for each invocation; provide and reuse a key for retries. Direct REST always requires idempotencyKey." - added
Input schema / properties / language / defaultAdded value: +"en" - changed
Input schema / properties / language / descriptionPrevious value: -"Language of the offer, the terms and the documents. Defaults to en."New value: +"Language of the offer, the terms and the documents. This MCP adapter defaults to en; direct REST requires payload.language explicitly."
- Added
kya_challenge - Added
kya_status - Added
kya_verify
1 tool update
- Changed
create_order2 fields changed- added
Input schema / properties / linesAdded value: +{ + "description": "Only for services that have catalog.services.<service>.configurator. One entry per item: item is an id from configurator.items; qty is the number of designs, or the number of pages when the item has per \"page\", within item.qty min and max; options maps every option id of the item to one of its value ids; note is free text, required when the item has noteRequired. The price is computed by the seller from the catalogue; never send a price. If any chosen item has price null, the order waits for a person to price it.", + "items": { + "additionalProperties": false, + "properties": { + "item": { + "type": "string" + }, + "note": { + "maxLength": 500, + "type": "string" + }, + "options": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "qty": { + "type": "integer" + } + }, + "required": [ + "item" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / printQuoteAdded value: +{ + "description": "Only with lines: the buyer would like a print quote once the design work has started. Printing is not part of this order.", + "type": "boolean" +}
4 tool updates
- Changed
accept_offer12 fields changed- added
Input schema / properties / accessToken / descriptionAdded value: +"The accessToken returned by create_order." - added
Input schema / properties / billing / additionalPropertiesAdded value: +false - changed
Input schema / properties / billing / descriptionPrevious value: -"type (person or company), fullName or company with eik, email, country, city, address, phone."New value: +"The buyer as it will appear on the invoice and the contract. For type company, company, registration and representative are also required. For type person, leave out company, registration, vat and representative. No other keys are accepted." - added
Input schema / properties / billing / ifAdded value: +{ + "properties": { + "type": { + "const": "company" + } + } +} - added
Input schema / properties / billing / propertiesAdded value: +{ + "address": { + "maxLength": 250, + "minLength": 3, + "type": "string" + }, + "city": { + "maxLength": 100, + "minLength": 1, + "type": "string" + }, + "company": { + "description": "Company only. Registered name.", + "maxLength": 200, + "minLength": 2, + "type": "string" + }, + "country": { + "description": "ISO 3166-1 alpha-2 code, for example BG.", + "pattern": "^[A-Za-z]{2}$", + "type": "string" + }, + "email": { + "maxLength": 254, + "type": "string" + }, + "fullName": { + "description": "Full name of the buyer, or of the contact person for a company.", + "maxLength": 150, + "minLength": 3, + "type": "string" + }, + "phone": { + "description": "Optional.", + "maxLength": 40, + "minLength": 5, + "type": "string" + }, + "registration": { + "description": "Company only. Company registration number; for country BG the 9- or 13-digit EIK.", + "maxLength": 40, + "minLength": 4, + "type": "string" + }, + "representative": { + "description": "Company only. The person who legally represents the company.", + "maxLength": 150, + "minLength": 3, + "type": "string" + }, + "type": { + "enum": [ + "person", + "company" + ], + "type": "string" + }, + "vat": { + "description": "Company only. Optional VAT number.", + "maxLength": 40, + "minLength": 4, + "type": "string" + } +} - added
Input schema / properties / billing / requiredAdded value: +[ + "type", + "fullName", + "email", + "country", + "city", + "address" +] - added
Input schema / properties / billing / thenAdded value: +{ + "required": [ + "company", + "registration", + "representative" + ] +} - changed
Input schema / properties / clientId / descriptionPrevious value: -"Your client identifier, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent." - added
Input schema / properties / offerVersion / descriptionAdded value: +"offer.version from the order, copied exactly." - added
Input schema / properties / order / descriptionAdded value: +"The order id returned by create_order." - changed
Input schema / properties / secret / descriptionPrevious value: -"Your secret, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent." - added
Input schema / properties / termsHash / descriptionAdded value: +"SHA-256 of the terms page in the language of the order: offer.terms.<language>.hash from the order, copied exactly. Sending it confirms that the buyer accepts those terms."
- Changed
create_order6 fields changed- added
Input schema / properties / brief / additionalPropertiesAdded value: +{ + "type": "string" +} - changed
Input schema / properties / brief / descriptionPrevious value: -"The fields the catalogue declares for this service."New value: +"One string per field the catalogue lists under this service in catalog.services.<service>.fields. Use each field id as the key. Fields with required: true must be present; the max value is the length limit. No other keys are accepted." - changed
Input schema / properties / clientId / descriptionPrevious value: -"Your client identifier, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent." - changed
Input schema / properties / language / descriptionPrevious value: -"Language of the offer and the documents. Defaults to en."New value: +"Language of the offer, the terms and the documents. Defaults to en." - changed
Input schema / properties / secret / descriptionPrevious value: -"Your secret, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent." - changed
Input schema / properties / service / descriptionPrevious value: -"Service identifier from the catalogue."New value: +"Service id: one of the keys of catalog.services, as returned by the catalog tool."
- Changed
order_status4 fields changed- added
Input schema / properties / accessToken / descriptionAdded value: +"The accessToken returned by create_order." - changed
Input schema / properties / clientId / descriptionPrevious value: -"Your client identifier, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent." - added
Input schema / properties / order / descriptionAdded value: +"The order id returned by create_order." - changed
Input schema / properties / secret / descriptionPrevious value: -"Your secret, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent."
- Changed
start_payment6 fields changed- added
Input schema / properties / accessToken / descriptionAdded value: +"The accessToken returned by create_order." - changed
Input schema / properties / clientId / descriptionPrevious value: -"Your client identifier, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The clientId returned by register_agent." - added
Input schema / properties / order / descriptionAdded value: +"The order id returned by create_order." - changed
Input schema / properties / secret / descriptionPrevious value: -"Your secret, if not sent in the Authorization header."New value: +"Required unless you authenticate with the Authorization header (Bearer <clientId>:<secret>, or an OAuth access token issued for this server). The secret returned by register_agent." - changed
Input schema / properties / sharedPaymentToken / descriptionPrevious value: -"Optional. A Stripe shared payment token granted to the seller profile named in the manifest."New value: +"Only for delegated payment without a hosted page: a Stripe shared payment token granted to the seller profile in manifest.payment.networkBusinessProfile. Leave it out to receive a hosted payment session instead." - changed
Input schema / properties / stage / descriptionPrevious value: -"Defaults to advance."New value: +"advance: the first payment, open after accept_offer. It is 50% of the total, or the whole total when the service is paid at once (paymentPlan single in the catalogue). final: the remaining 50%, open only after the advance is paid and the seller has released the work for final payment. Defaults to advance."
7 tool updates
- First observed
accept_offer - First observed
catalog - First observed
create_order - First observed
manifest - First observed
order_status - First observed
register_agent - First observed
start_payment
Related MCP Connectors
AI service marketplace — agents discover, call, and pay for API services automatically.
Search and discover advertiser products through an open marketplace for AI agents.
Autonomous commerce for AI agents: discover, quote, order, pay, verify.
Machine-service catalogue, payment hand-off and free market discovery for autonomous AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse, search, and purchase 74+ AI products and services across 7 categories, with free demos and Alipay payment integration.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to autonomously discover services, negotiate binding quotes, make idempotent purchases, and receive cryptographically verifiable deliverables.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover, price, and purchase SaaS products, developer tools, and MCP servers with live Stripe checkout, affiliate program, and AgentTrust verification.MIT

Voidpay Marketplaceofficial
AlicenseNot gradedqualityAmaintenanceLets AI agents search a marketplace of agent services, read seller storefronts, and prepare a checkout link that a human owner approves and pays in their browser. The agent never holds keys or signs.Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.