_ registry / mcp + a2a streamable-http · checked 3h ago

Brand Design Ltd.

https://branddesign.ltd

Registry code: 77f1ff8748f0b569

api record

Brand Design Ltd. is a brand, web and AI-visibility agency in Varna, Bulgaria: brand strategy and identity, logo, websites, print and outdoor advertising, video and 3D, SEO and GEO, market research, marketing and campaigns, the B2A services, the Business Audit and agentic commerce. Start with the concierge tool. Called without a question, it introduces the company in order: who we are, what we do, clients and results, who confirms it, with links to check. Called with a question, it answers about the agency from verified company knowledge, in your language. Use introduce to pass your…

endpoint
https://branddesign.ltd/mcp
door code
fe5bb2fd94b9ff03
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is Brand Design Ltd. live?
Yes — it answered the hub's last check (checked 3h ago). It answered 99% of checks over the last 30 days.
Is Brand Design Ltd. free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does Brand Design Ltd. have?
12 tools: create_order, concierge, introduce, register_agent, kya_challenge, kya_verify, accept_offer, start_payment, ….
Is Brand Design Ltd. safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.2%

90 days 99.5%· all time 99.7%

latency
808ms

last good check

priced tools
0

of 12 tools

_ answered our checks, 90 days 398 checks · signed record
  • degraded → live
  • live → degraded· endpoint unreachable (timeout after 20000ms); card still served
  • unknown → live
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • browse a design company's service catalogue
  • place an order for a design service
  • accept an offer and pay for it
  • check order status
takes → gives
text, data → data, payments
tools
3 reads2 changes data2 moves money
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
1

through this hub

calls served
1

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 12 tools
2 open1 auth-required 9 never probed 3 of 12 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • catalog reads open 10h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • manifest reads open 10h ago

    Read the commerce manifest: protocol, endpoints, authentication scheme, payment instrument and limits. No credentials needed.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • kya_status auth-required 10h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "secret": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • create_order moves money unknown never probed

    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[language].hash from it. Services without a catalogue price return an offer with no total and wait for a person to price it. The request must come from a verified robot: signed by its maker (Web Bot Auth) or from the published addresses of its maker. Errors: KYA_VERIFICATION_REQUIRED (403) without it, MISSING_ followed by the field id when a required brief field is absent, UNEXPECTED_FIELD when the brief has a key the service does not declare.

    mcp-tool

    {
      "type": "object",
      "required": [
        "service",
        "brief"
      ],
      "properties": {
        "brief": {
          "type": "object",
          "description": "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.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "lines": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "item"
            ],
            "properties": {
              "qty": {
                "type": "integer"
              },
              "item": {
                "type": "string"
              },
              "note": {
                "type": "string",
                "maxLength": 500
              },
              "options": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "additionalProperties": false
          },
          "maxItems": 20,
          "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."
        },
        "secret": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "Service id: one of the keys of catalog.services, as returned by the catalog tool."
        },
        "clientId": {
          "type": "string",
          "description": "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": {
          "enum": [
            "bg",
            "en"
          ],
          "type": "string",
          "default": "en",
          "description": "Language of the offer, the terms and the documents. This MCP adapter defaults to en; direct REST requires payload.language explicitly."
        },
        "printQuote": {
          "type": "boolean",
          "description": "Only with lines: the buyer would like a print quote once the design work has started. Printing is not part of this order."
        },
        "idempotencyKey": {
          "type": "string",
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 76 lines
  • concierge unknown never probed

    Start here: the information desk of Brand Design Ltd. Without a question: who Brand Design Ltd. is, what it does, its clients and results and who confirms them, with links to check, and the next steps. With a question: an answer about the agency, its services, prices and how to order, from verified company knowledge, in the language of the question, with sources. When your principal wants to order, it can also prepare the offer with a checkout link, beside catalog and create_order here; it never accepts an offer or pays. Questions need no credentials. An offer is prepared only for a verified robot (signed by its maker or from the published addresses of its maker), as for create_order; credentials are optional. If your principal asks to be contacted, it can pass the enquiry to the founder. Pass the returned session to continue.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "agent": {
          "type": "string",
          "description": "Optional: your name and platform as an agent, for example \"ChatGPT agent, OpenAI\" or \"Claude, Anthropic\". The team sees it with the conversation; the answers are the same without it."
        },
        "secret": {
          "type": "string",
          "description": "Optional, unless you authenticate with the Authorization header: the secret returned by register_agent."
        },
        "session": {
          "type": "string",
          "description": "The session code from a previous answer, to continue the conversation."
        },
        "clientId": {
          "type": "string",
          "description": "Optional, unless you authenticate with the Authorization header: the clientId returned by register_agent."
        },
        "language": {
          "enum": [
            "en",
            "bg"
          ],
          "type": "string",
          "description": "Language of the introduction. Answers follow the language of the question."
        },
        "question": {
          "type": "string",
          "description": "Your question about Brand Design Ltd. Leave it out for the introduction."
        },
        "acting_for": {
          "type": "string",
          "description": "Optional, only if your principal agrees: the person or company you act for. The team sees it with the conversation."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • introduce unknown never probed

    Introduce yourself and the person or company you act for, and pass their enquiry to Nikola Mishev, the founder of Brand Design Ltd., by e-mail. He replies to the contact you give. Use it only when your principal wants to be contacted. No credentials needed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "represents",
        "need",
        "contact"
      ],
      "properties": {
        "need": {
          "type": "string",
          "description": "What they need, in their words."
        },
        "agent": {
          "type": "string",
          "description": "Your name and platform as an agent or assistant, for example \"Claude, Anthropic\"."
        },
        "contact": {
          "type": "string",
          "description": "E-mail or phone for the reply."
        },
        "session": {
          "type": "string",
          "description": "The concierge session code, if you talked to the concierge first."
        },
        "website": {
          "type": "string",
          "description": "Their website, if any."
        },
        "language": {
          "type": "string",
          "description": "Preferred language for the reply."
        },
        "represents": {
          "type": "string",
          "description": "The person or company you act for."
        }
      },
      "additionalProperties": false
    }
    arguments 39 lines
  • register_agent changes data unknown never probed

    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 clientId:secret" for the other tools.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "contact"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Your name, 2 to 80 characters."
        },
        "contact": {
          "type": "string",
          "description": "A https:// or mailto: URL at which a human can reach whoever runs you."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • kya_challenge unknown never probed

    Adds the owner limit: a verified DNS record on your own domain lets your owner cap the amount per order and withdraw your right to pay by removing it. The mandatory domain verification is against the domain of your maker. 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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "secret": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "pattern": "^https://",
          "maxLength": 200,
          "minLength": 10,
          "description": "HTTPS URL on your own public domain. No IP address, credentials, custom port or URL fragment."
        },
        "clientId": {
          "type": "string",
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • kya_verify unknown never probed

    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 and is read again from DNS at every create_order, accept_offer and start_payment, which all require it. It does not grant buyer payment authority.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "secret": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • accept_offer changes data unknown never probed

    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. The request must come from a verified robot. Errors: KYA_VERIFICATION_REQUIRED or KYA_REVOKED (403) without it, 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "order",
        "accessToken",
        "offerVersion",
        "termsHash",
        "billing"
      ],
      "properties": {
        "order": {
          "type": "string",
          "description": "The order id returned by create_order."
        },
        "secret": {
          "type": "string",
          "description": "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": {
          "if": {
            "properties": {
              "type": {
                "const": "company"
              }
            }
          },
          "then": {
            "required": [
              "company",
              "registration",
              "representative"
            ]
          },
          "type": "object",
          "required": [
            "type",
            "fullName",
            "email",
            "country",
            "city",
            "address"
          ],
          "properties": {
            "vat": {
              "type": "string",
              "maxLength": 40,
              "minLength": 4,
              "description": "Company only. Optional VAT number."
            },
            "city": {
              "type": "string",
              "maxLength": 100,
              "minLength": 1
            },
            "type": {
              "enum": [
                "person",
                "company"
              ],
              "type": "string"
            },
            "email": {
              "type": "string",
              "maxLength": 254
            },
            "phone": {
              "type": "string",
              "maxLength": 40,
              "minLength": 5,
              "description": "Optional."
            },
            "address": {
              "type": "string",
              "maxLength": 250,
              "minLength": 3
            },
            "company": {
              "type": "string",
              "maxLength": 200,
              "minLength": 2,
              "description": "Company only. Registered name."
            },
            "country": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$",
              "description": "ISO 3166-1 alpha-2 code, for example BG."
            },
            "fullName": {
              "type": "string",
              "maxLength": 150,
              "minLength": 3,
              "description": "Full name of the buyer, or of the contact person for a company."
            },
            "registration": {
              "type": "string",
              "maxLength": 40,
              "minLength": 4,
              "description": "Company only. Company registration number; for country BG the 9- or 13-digit EIK."
            },
            "representative": {
              "type": "string",
              "maxLength": 150,
              "minLength": 3,
              "description": "Company only. The person who legally represents the company."
            }
          },
          "description": "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.",
          "additionalProperties": false
        },
        "clientId": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "The accessToken returned by create_order."
        },
        "offerVersion": {
          "type": "string",
          "description": "offer.version from the order, copied exactly."
        },
        "immediateStart": {
          "type": "boolean",
          "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."
        }
      },
      "additionalProperties": false
    }
    arguments 132 lines
  • start_payment moves money unknown never probed

    Start payment for a stage. Needs credentials. Without sharedPaymentToken you receive the link to our payment page (form.redirect), which you may complete yourself with a card issued to you, or hand to the person you act for; on that page the card must be in the name on the invoice (for a company: its representative or the company name) and the cardholder address must be in the invoice country, and every order placed by an AI agent needs the cardholder to confirm with the bank (3-D Secure). With a delegated shared payment token the payment settles directly. The request must come from a verified robot: signed by its maker (Web Bot Auth) or from the published addresses of its maker. If the owner of the agent verified a DNS record with kya_challenge and kya_verify, the record is read again at payment and its limit applies; kya_status reads it. 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, OWNER_APPROVAL_REQUIRED (409) for a first order above EUR 1000 from a new e-mail or card until the merchant approves it, BUYER_BLOCKED (403), PAYMENTS_DISABLED (503).

    mcp-tool

    {
      "type": "object",
      "required": [
        "order",
        "accessToken"
      ],
      "properties": {
        "order": {
          "type": "string",
          "description": "The order id returned by create_order."
        },
        "stage": {
          "enum": [
            "advance",
            "final"
          ],
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "The accessToken returned by create_order."
        },
        "sharedPaymentToken": {
          "type": "string",
          "description": "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 the link to our payment page instead."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • order_status reads unknown never probed

    Read the current state of the order, its offer and its payments, including the invoice number once one has been issued. Needs credentials.

    mcp-tool

    {
      "type": "object",
      "required": [
        "order",
        "accessToken"
      ],
      "properties": {
        "order": {
          "type": "string",
          "description": "The order id returned by create_order."
        },
        "secret": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "The accessToken returned by create_order."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
_ try it over mcp through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 77f1ff8748f0b569.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/77f1ff8748f0b569/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/77f1ff8748f0b569/badge.svg)](https://brick.blue/agent/77f1ff8748f0b569?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we knowoff the mcp door
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
1
ok
1
failed
0
success rate
100%
median latency
3,152ms
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

1 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.