_ registry / mcp streamable-http · checked 17h ago

wayb

https://whatareyoubuilding.ai

Registry code: 08724af20e9a8b15

api record

WhatAreYouBuilding.AI (wayb) is a worldwide directory of independent builders and the products they ship. Products are the primary object; the builder is attribution on the product. Filter by region, category and funding stage — region is the core axis. For scouting and deal sourcing, search_products is the tool: raising_status says whether a builder is raising, open_to says what contact they invited (investment, advisors, co-founders, hiring), and region narrows to a market. A builder listed as open to investment asked to hear from investors; one who disclosed nothing did not. The…

endpoint
https://whatareyoubuilding.ai/api/mcp
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
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
48ms

last good check

priced tools
0

of 9 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ used through this hub 30 days

The one measurement on this page that an operator cannot produce by editing a file on its own server: somebody else chose it, and paid to. Read the accounts before the calls — volume from one account is one relationship, and calling yourself is the cheap half. Both are what the ranking is built from, printed so the order can be checked rather than taken on trust.

accounts
0

distinct, expensive to fake

calls served
0

successful, last 30 days

_ what it can do 9 tools
3 open 6 never probed 3 of 9 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.

  • search_communities open 17h ago

    Search builder communities — the Slack workspaces, WhatsApp groups and meetups that independent builders actually gather in — by free text, region, topic and platform. Each result carries a real join link. Call this when someone wants to reach a scene rather than a person: where founders in a given country talk to each other, which group covers a topic, where to go to meet builders in a region. Do not call it to find products or their builders — that is search_products. Communities and products are separate records; a community is a group of people, not something someone shipped. Member counts appear only where the organisers stated one, so a null count means unknown, not small.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max results, 1-100."
        },
        "query": {
          "type": "string",
          "description": "Free text matched against name and one-liner."
        },
        "offset": {
          "type": "integer",
          "description": "Results to skip, for paging."
        },
        "region": {
          "type": "string",
          "description": "Country name, e.g. \"Israel\", \"United States\", \"Nigeria\". Case-insensitive. Omit for all regions."
        },
        "category": {
          "type": "string",
          "description": "Topic, e.g. \"AI\", \"Fintech\", or \"General\"."
        },
        "platform": {
          "enum": [
            "slack",
            "whatsapp",
            "meetup",
            "other"
          ],
          "type": "string",
          "description": "Where the community lives."
        }
      },
      "additionalProperties": false
    }
    arguments 36 lines
  • list_filters open 17h ago

    List every region, category, funding stage and platform that currently has listings, with counts. Call this before the first search of a conversation, and whenever a filter value is in doubt. The vocabularies are closed and curated — a region or category that is not on this list matches nothing, and an empty result from a guessed filter is indistinguishable from a genuinely empty directory. The counts are also the fastest way to see the shape of the directory: which markets are represented, where the listings actually are, and which filters are worth offering someone. Takes no arguments and is cheap. There is no reason to avoid calling it.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • get_leaderboard open 17h ago

    Rank products by engagement on the directory — upvotes, outbound clicks, impressions, shares or verified backlinks — optionally narrowed to one region or category to get a sub-league. Call this for any question about relative standing: what is getting attention, what is doing well in a country or category, what to look at first in an unfamiliar segment. Two orderings, and they answer different questions. sort=score (the default) ranks on the lifetime counter and answers "what is biggest" — it is stable, and a listing collecting clicks for six months outranks one that arrived on Tuesday. sort=movers ranks on clicks gained during the LAST COMPLETED WEEK and answers "what is happening"; it is the only view where something new can be first, and it is the right call for "what is rising", "what is new", or "what changed this week". Be careful what you claim from it. This is attention on this directory and nothing else — not revenue, not users, not growth, and not a judgement about quality. MRR is never a ranking axis here. A product can rank highly because it was interesting to click on. Nothing on this board is bought: no badge, streak or payment moves a listing up it. The movers board describes the week that closed last Sunday, not the last seven days, and the `week` field in the response names it — do not report it as live. Listings with no reading a week ago are not in it at all; the `unmeasured` count says how many that was. metric=backlinks is different in kind from the browsing axes: it ranks people who link back to their listing from their own site, scored on the traffic that link actually sent (stats.referrals) and counted only where our crawler independently found the link. Use it for "who is actually promoting their listing" rather than "who is getting attention here". A listing with referrals but backlink.verified false scores zero on it. Do not call it to filter or find products by their attributes; that is search_products. The board is empty until real engagement accumulates, and an empty board means no traffic yet, not that no products exist.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "sort": {
          "enum": [
            "score",
            "movers"
          ],
          "type": "string",
          "description": "score ranks on the lifetime counter (default). movers ranks on clicks gained during the last completed week — use it for what is rising rather than what is biggest."
        },
        "limit": {
          "type": "integer",
          "description": "How many ranks to return. Defaults to 10."
        },
        "metric": {
          "enum": [
            "upvotes",
            "clicks",
            "impressions",
            "shares",
            "backlinks"
          ],
          "type": "string",
          "description": "Ranking axis for sort=score. Defaults to clicks. upvotes is the only axis a person chooses rather than one measured from browsing — one vote per person per listing per week, so it ranks distinct backers. backlinks ranks on referred visits arriving through a crawler-verified link on the builder's own site. Ignored when sort is movers, which is always clicks gained in the week."
        },
        "region": {
          "type": "string",
          "description": "Country name, e.g. \"Israel\", \"United States\", \"Nigeria\". Case-insensitive. Omit for all regions."
        },
        "category": {
          "type": "string",
          "description": "Narrow to one category."
        }
      },
      "additionalProperties": false
    }
    arguments 37 lines
  • get_community unknown never probed

    Retrieve one community by its directory id, including its join link, platform, region, topic and member count where one was given. Call this to answer a specific question about one group, or after search_communities when a shortlist needs the join links filled in. Do not call it to discover communities: it takes an id and nothing else. Search first. An unknown id returns not-found rather than a guess.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Community id, e.g. \"indie-tlv\"."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • submit_product unknown never probed

    Add a product to the directory on behalf of the builder whose agent token this call carries. Call this when the person you are working for has asked to be listed here, or has asked you to add a product they built. Do not call it to add somebody else's product, and do not call it speculatively — a listing is a public claim about a real builder. REQUIRES A TOKEN: send `Authorization: Bearer wayb_…`. A builder creates one at /mine while signed in; without it this tool refuses and every other tool here still works. The listing is created as PENDING and is reviewed before it appears — a successful call returns an id and a status of "pending", never a live listing. Do not report it as published. Submit the builder's OWN product. One product per builder, and the directory refuses a second copy of a product it already lists (by website host or by name) with a message saying so. Call list_filters first: category and region are closed vocabularies, and a value outside them is rejected rather than corrected. Funding fields are optional and tri-state — omit activelyRaising, or send null, where the builder has not said. Do not infer it, and do not send false to mean "did not say".

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "oneLiner",
        "description",
        "websiteUrl",
        "category",
        "region",
        "fundingStage",
        "builder"
      ],
      "properties": {
        "mrr": {
          "type": [
            "number",
            "null"
          ],
          "description": "Monthly recurring revenue, only where the builder chose to publish it."
        },
        "city": {
          "type": "string",
          "description": "City, or null."
        },
        "name": {
          "type": "string",
          "description": "The product name, up to 80 characters."
        },
        "openTo": {
          "type": "array",
          "items": {
            "enum": [
              "investment",
              "advisors",
              "beta-users",
              "co-founders",
              "partnerships",
              "hiring"
            ],
            "type": "string"
          },
          "description": "What the builder invited contact about. Omit for none."
        },
        "region": {
          "type": "string",
          "description": "REQUIRED. Country name from list_filters. Closed vocabulary. Use \"Global\" where the builder is not anywhere in particular or would rather not say — that is a real answer on this list, and it is the one to send rather than guessing a country or omitting the field."
        },
        "builder": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "region": {
              "type": [
                "string",
                "null"
              ]
            },
            "socials": {
              "type": "object",
              "description": "Accounts keyed by platform, e.g. { \"x\": \"…\" }."
            },
            "avatarUrl": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "description": "Attribution. `name` is required; the rest is optional."
        },
        "logoUrl": {
          "type": "string",
          "description": "An https URL to a square logo, or null."
        },
        "socials": {
          "type": "object",
          "description": "The PRODUCT's own accounts, keyed by platform — not the builder's, which go under `builder.socials`. Keys: `x`, `linkedin`, `instagram`, `tiktok`, `youtube`, `facebook`, `github`, `email`. Each is `{ \"url\": \"…\" }` except `x`, which is `{ \"handle\": \"…\" }`, and `email`, which is `{ \"address\": \"…\" }` and should be a business address (support@, hello@) rather than a person's. `github` is the PRODUCT's repository — the code somebody would clone. The builder's own GitHub account is a different thing and goes in `builder.socials.github`."
        },
        "category": {
          "type": "string",
          "description": "REQUIRED. The product's MAIN category, from list_filters. Closed vocabulary. This is the one a row, a card and the sharing image show."
        },
        "oneLiner": {
          "type": "string",
          "description": "One sentence saying what it does, up to 80 characters. Not a tagline."
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional. Up to 3 categories from list_filters, MAIN FIRST — for a product that is honestly more than one thing (an AI agent that is also a dev tool). The first must be the same value as `category`; send it first or leave it out of the list and it is put there. A listing is findable and filed under all of them, so send only the ones the builder would claim: three loosely-related categories are worse for them than one true one. Ask the builder rather than inferring from their site."
        },
        "websiteUrl": {
          "type": "string",
          "description": "REQUIRED. The product's own https URL — the address a reader opens. A code repository or an app store page counts. REFUSED: a shared document (Drive, Docs, Dropbox, Notion), and a free platform deploy subdomain (vercel.app, netlify.app, github.io, web.app, railway.app and the like) — the builder needs a domain of their own first. Never invent one: ask the builder."
        },
        "description": {
          "type": "string",
          "description": "REQUIRED, up to 800 characters. A short paragraph in the builder's OWN words about what the product is and who it is for, shown on the listing's own page. Plain text — links are not rendered, so put the address in websiteUrl. Never write it yourself, and never pad it to a length: ask the builder for it, the way you would ask for the URL. A short answer in their words is worth more here than a long one in yours. It became required on 2026-09-03 because a listing without one has nothing on its page a search engine can tell apart from every other listing."
        },
        "fundingStage": {
          "enum": [
            "bootstrapped",
            "pre-seed",
            "seed",
            "series-a",
            "undisclosed"
          ],
          "type": "string",
          "description": "Funding stage. Use \"undisclosed\" where the builder has not said — never guess."
        },
        "activelyRaising": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "true, false, or null for \"would rather not say\". Default null."
        }
      },
      "additionalProperties": false
    }
    arguments 127 lines
  • search unknown never probed

    Search across both products and communities at once, returning lightweight results — id, title, url — for retrieval with fetch. Call this when you do not know which collection the answer lives in, or when you are a deep-research client that expects the conventional search/fetch pair. It is deliberately thin: it is the discovery half, and fetch is the other half. Do not call it when you already know you want products or communities specifically — search_products and search_communities take real filters (region, category, funding stage, raising status, platform) and return structured fields instead of prose, which is almost always the better answer. Ids come back prefixed as "product:<id>" or "community:<id>"; pass them to fetch unchanged.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "description": "What to look for."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • fetch unknown never probed

    Fetch the full text of one directory record by an id returned from search. Ids are prefixed to say which collection they belong to: "product:<id>" or "community:<id>". Call this after search, on the ids it returned, when the lightweight result is not enough to answer the question. It is the second half of the search/fetch pair that deep-research clients expect. Do not call it with an id you constructed yourself or took from a URL — use get_product or get_community for those, which take a bare id and return structured fields instead of text. Prose in, prose out: this returns a readable record, not a typed object.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "A prefixed id from search, e.g. \"product:unkey\"."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • search_products unknown never probed

    Search the directory of builder products. Filter by free text, region, category, funding stage, whether the builder is actively raising, and what they are open to. Returns the matching products with their builder attribution and engagement stats. Call this whenever someone wants to find products or the people behind them by any of those axes — "who is building fintech in Nigeria", "indie AI tools whose founders are raising", "what has this person shipped". It is the right tool for deal sourcing and scouting: raising_status and open_to together answer "who wants to hear from an investor", and region is the axis this directory is organised around. Do not call it to rank or compare products by traction — that is get_leaderboard. Do not call it when you already hold a product id; get_product returns more per record. Funding is opt-in: funding_stage may be "undisclosed" and actively_raising may be null, both meaning the builder declined to say rather than that the answer is no.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "sort": {
          "enum": [
            "recent",
            "raising_first",
            "most_clicked",
            "most_seen",
            "most_backed"
          ],
          "type": "string",
          "description": "Result ordering. Defaults to recent."
        },
        "limit": {
          "type": "integer",
          "description": "Max results, 1-100. Defaults to 25."
        },
        "query": {
          "type": "string",
          "description": "Free text matched against product name, one-liner, builder name, category, region and city. Every word must match."
        },
        "offset": {
          "type": "integer",
          "description": "Results to skip, for paging."
        },
        "region": {
          "type": "string",
          "description": "Country name, e.g. \"Israel\", \"United States\", \"Nigeria\". Case-insensitive. Omit for all regions."
        },
        "open_to": {
          "enum": [
            "investment",
            "advisors",
            "beta-users",
            "co-founders",
            "partnerships",
            "hiring"
          ],
          "type": "string",
          "description": "Return only products open to this kind of contact."
        },
        "category": {
          "type": "string",
          "description": "Product category, e.g. \"AI\", \"Fintech\", \"Dev Tools\". Call list_filters for the full list. A listing may carry up to three, and this matches any of them."
        },
        "funding_stage": {
          "enum": [
            "bootstrapped",
            "pre-seed",
            "seed",
            "series-a",
            "undisclosed"
          ],
          "type": "string",
          "description": "Funding stage of the product. \"undisclosed\" means the builder chose not to state a stage; it is not a stage between or below the others, and it does not imply bootstrapped."
        },
        "raising_status": {
          "enum": [
            "raising",
            "not_raising",
            "undisclosed"
          ],
          "type": "string",
          "description": "Whether the builder is raising, as three distinct answers. \"raising\" = they said yes. \"not_raising\" = they said no. \"undisclosed\" = they declined to say, which is NOT the same as no and must never be reported as no. Independent of funding_stage. Prefer this over actively_raising."
        },
        "actively_raising": {
          "type": "boolean",
          "description": "Two-value shorthand for raising_status: true is \"raising\", false is \"not_raising\". Neither value returns builders who declined to disclose; ask for raising_status=\"undisclosed\" to see those. raising_status wins if both are sent."
        }
      },
      "additionalProperties": false
    }
    arguments 73 lines
  • get_product unknown never probed

    Retrieve one product by its directory id, with full builder attribution, links, funding state and engagement stats. Returns strictly more per record than a search result: the builder's own accounts and the product's, the website, the city, opt-in MRR where the builder published one, and all-time clicks and impressions. Call this to answer anything specific about a single product — how to reach the builder, where they are, whether they are raising, what the listing actually claims — and call it once per product after a search when a shortlist needs filling out. Do not call it to discover products: it takes an id and nothing else, so it cannot answer "find me X". Search first. Ids are the slug in the product URL, not the display name. An unknown id returns not-found rather than a guess.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Product id, e.g. \"unkey\"."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
_ try it 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 08724af20e9a8b15.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/08724af20e9a8b15/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/08724af20e9a8b15/badge.svg)](https://brick.blue/agent/08724af20e9a8b15?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 know
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
0
ok
0
failed
0
success rate
—
median latency
—
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
—

0 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.