_ registry / mcp http-sse · checked 1h ago

kulhad

https://kulhad.co

Registry code: 1d3657ca3aa157f3

api record

Kulhad is a support page for creators in India, paid over UPI. Money moves bank to bank between a supporter and the creator, and never through Kulhad, so nothing here can send, receive or refund a payment. A supporter marks a payment as sent and the creator approves it after checking their own bank app; never tell a creator that a payment has been confirmed, only that somebody marked it as sent.

endpoint
https://kulhad.co/mcp
protocol
http-sse ·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 kulhad live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is kulhad free to use?
No — it asks for a key or a login before it will serve.
What tools does kulhad have?
44 tools: list_goals, get_wrapped, get_goal, set_upi_rotation, get_support_sources, remove_custom_domain, bulk_approve_supports, bulk_reject_supports, ….
Is kulhad 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
100%

90 days 100%· all time 100%

latency
247ms

last good check

priced tools
0

of 44 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ 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
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 44 tools
44 auth-required 44 of 44 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.

  • list_goals auth-required never probed

    List every goal on the page, the active one first, with how much each has raised against its target.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • get_wrapped auth-required never probed

    Kulhad Wrapped for a year: how many people supported, the total, page views, the busiest month, and the largest single support. Free on every plan.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "year": {
          "type": "integer",
          "maximum": 2100,
          "minimum": 2024,
          "description": "Defaults to the current year."
        }
      }
    }
    arguments 12 lines
  • get_goal auth-required never probed

    Read one goal in full, including its impact tiers and its progress notes.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 14 lines
  • set_upi_rotation auth-required never probed

    When on, active UPI IDs take turns being quoted so support spreads across them instead of landing in one account. Part of Premium.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "enabled"
      ],
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      }
    }
    arguments 12 lines
  • get_support_sources auth-required never probed

    Break approved support down by where it came from: the page itself, an embedded button, a QR code, the printed counter card, or a link tagged for WhatsApp, Instagram, YouTube or a standee. Use this to answer which channel is actually working.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "to": {
          "type": "string",
          "description": "Only up to this date, as YYYY-MM-DD."
        },
        "from": {
          "type": "string",
          "description": "Only from this date onward, as YYYY-MM-DD."
        }
      }
    }
    arguments 14 lines
  • remove_custom_domain auth-required never probed

    Disconnect the custom domain, so the page is served from its kulhad.co address again. Anything printed with the old domain on it stops working, so confirm with the creator first.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • bulk_approve_supports auth-required never probed

    Approve several waiting supporters at once, after the creator has checked their bank. Part of Premium. Anything already settled is left alone.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "ids"
      ],
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "maxItems": 100,
          "minItems": 1
        },
        "hidden": {
          "type": "boolean",
          "default": false,
          "description": "Approve without publishing them on the page."
        }
      }
    }
    arguments 24 lines
  • bulk_reject_supports auth-required never probed

    Reject several waiting supporters at once. Part of Premium. This cannot be undone, so confirm the list with the creator first.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "ids"
      ],
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "maxItems": 100,
          "minItems": 1
        }
      }
    }
    arguments 19 lines
  • start_signup auth-required never probed

    Get a link that opens Kulhad sign-up with a page name already filled in. Hand the link to the person setting up the page: they finish it themselves in a browser. This does not create an account and cannot; it only holds the name for fifteen minutes so nobody else takes it in the meantime.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "username"
      ],
      "properties": {
        "username": {
          "type": "string",
          "description": "The page name to reserve and prefill. For example: priya"
        }
      }
    }
    arguments 13 lines
  • get_my_profile auth-required never probed

    Read the page details for the signed-in creator: name, page address, bio, links, language, plan, and whether a custom domain is connected.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • get_page_settings auth-required never probed

    Read the current appearance and behaviour settings for the page: theme, banner, suggested amounts, what is shown publicly, and the thank-you note.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • create_goal auth-required never probed

    Create a goal with a title and a target amount. It becomes the goal shown on the page unless active is false. The free plan runs one goal at a time.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "title",
        "targetAmount"
      ],
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 60
        },
        "active": {
          "type": "boolean",
          "default": true,
          "description": "Show it on the page straight away."
        },
        "impact": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "amount",
              "label"
            ],
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40
              },
              "amount": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": 1
              }
            }
          },
          "maxItems": 3,
          "description": "What each amount pays for, shown on the goal. Premium."
        },
        "deadline": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "As YYYY-MM-DD. Null clears it. A goal does not stop at its deadline."
        },
        "description": {
          "type": "string",
          "maxLength": 280
        },
        "targetAmount": {
          "type": "integer",
          "maximum": 10000000,
          "minimum": 1,
          "description": "In whole rupees."
        }
      }
    }
    arguments 63 lines
  • update_goal auth-required never probed

    Change a goal title, target, description, deadline or impact tiers. Only the fields you pass change. Renaming a goal moves the address of its own page.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        "title": {
          "type": "string",
          "maxLength": 60
        },
        "impact": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "amount",
              "label"
            ],
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 40
              },
              "amount": {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": 1
              }
            }
          },
          "maxItems": 3,
          "description": "What each amount pays for, shown on the goal. Premium."
        },
        "deadline": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "As YYYY-MM-DD. Null clears it. A goal does not stop at its deadline."
        },
        "description": {
          "type": "string",
          "maxLength": 280
        },
        "targetAmount": {
          "type": "integer",
          "maximum": 10000000,
          "minimum": 1,
          "description": "In whole rupees."
        }
      }
    }
    arguments 62 lines
  • set_active_goal auth-required never probed

    Make one goal the one shown on the page, or turn the current one off. The page shows a single goal at a time, so choosing one puts the others away without deleting anything.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        "active": {
          "type": "boolean",
          "default": true,
          "description": "False turns this goal off and shows none."
        }
      }
    }
    arguments 19 lines
  • delete_goal auth-required never probed

    Delete a goal that nobody has given to yet. A goal with support stays in the history and can only be turned off, never deleted. This cannot be undone.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 14 lines
  • post_goal_update auth-required never probed

    Add a short note under a goal saying what the money did. Shown publicly, newest first. At most 20 per goal. Free on every plan.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "goalId",
        "body"
      ],
      "properties": {
        "body": {
          "type": "string",
          "maxLength": 280,
          "description": "What happened. Shown publicly under the goal."
        },
        "goalId": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 20 lines
  • delete_goal_update auth-required never probed

    Remove one progress note from a goal by its position in the list, counting from zero with the newest first. This cannot be undone.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "goalId",
        "index"
      ],
      "properties": {
        "index": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Zero is the newest note."
        },
        "goalId": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 21 lines
  • list_upi_ids auth-required never probed

    List the UPI IDs on the account, which are the addresses supporters pay into. The free plan keeps one of them active at a time.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • add_upi_id auth-required never probed

    Add a UPI ID for supporters to pay into. Kulhad cannot check that an address is real or that it belongs to the creator, so tell them to send one rupee to it themselves and confirm it arrived before sharing the page.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "vpa"
      ],
      "properties": {
        "vpa": {
          "type": "string",
          "description": "The UPI address, as in priya@okhdfc."
        },
        "label": {
          "type": "string",
          "maxLength": 40,
          "description": "What to call it, such as Personal or Shop."
        },
        "makeDefault": {
          "type": "boolean",
          "default": false,
          "description": "Quote this one first."
        }
      }
    }
    arguments 23 lines
  • update_upi_id auth-required never probed

    Change the address or label of a UPI ID, or switch it on or off. Changing the address clears the one-rupee check, because it proved the old address rather than the new one. At least one ID has to stay active.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        "vpa": {
          "type": "string"
        },
        "label": {
          "type": "string",
          "maxLength": 40
        },
        "active": {
          "type": "boolean"
        },
        "testDone": {
          "type": "boolean",
          "description": "Only set this true when the creator says they saw the rupee arrive."
        }
      }
    }
    arguments 28 lines
  • set_default_upi_id auth-required never probed

    Make one UPI ID the one supporters are shown first. The others stay on the account.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 14 lines
  • remove_upi_id auth-required never probed

    Remove a UPI ID from the account. The last one cannot be removed, because the page would have nowhere to send supporters. This cannot be undone; switching it off instead keeps it.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 14 lines
  • get_share_assets auth-required never probed

    Get the page address, the payment QR code, share images for stories and posts, and the printable sheets. Everything comes back as a link to open or download, not as an image.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • get_embed_code auth-required never probed

    Get the HTML to put a support button, the pay card, or a live goal bar on the creator own website or blog. Returns the snippets to paste, not a rendered preview.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "text": {
          "type": "string",
          "default": "Support me",
          "maxLength": 40,
          "description": "The words on the button."
        },
        "position": {
          "enum": [
            "right",
            "left"
          ],
          "type": "string",
          "default": "right",
          "description": "Which bottom corner the floating button sits in."
        }
      }
    }
    arguments 21 lines
  • get_stream_overlays auth-required never probed

    Get the three overlay addresses to add to OBS or any streaming software as a browser source: a goal bar, a wall of recent supporters, and an alert that appears when someone gives. Includes the size each source should be and when alerts currently fire.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "language": {
          "enum": [
            "page",
            "en",
            "hi",
            "hi-Latn",
            "mr",
            "ta",
            "te",
            "ml"
          ],
          "type": "string",
          "default": "page",
          "description": "Which language the overlays speak. \"page\" follows the page language and keeps following it if that changes later."
        },
        "wallRows": {
          "type": "integer",
          "default": 5,
          "maximum": 20,
          "minimum": 1,
          "description": "How many supporters the wall shows at once."
        },
        "alertSeconds": {
          "type": "integer",
          "default": 8,
          "maximum": 30,
          "minimum": 3,
          "description": "How long each alert stays on screen."
        }
      }
    }
    arguments 35 lines
  • send_test_alert auth-required never probed

    Fire a test alert so the creator can see where it lands in OBS while setting up. It is not a real support: nothing is recorded, no goal moves and nobody is thanked. It disappears on its own after a few seconds.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • get_plan_and_billing auth-required never probed

    Read which plan the account is on, when Premium runs to, whether it is set to end, and the past charges with links to their invoices. Read-only: nothing here starts, changes or cancels a subscription.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • set_custom_domain auth-required never probed

    Record the domain the creator wants in front of their page and return the DNS record to add. Part of Premium. This does not make the domain work: the creator adds the record at their registrar, then verify_custom_domain checks it.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "For example: priya.in or support.priya.in"
        }
      }
    }
    arguments 13 lines
  • verify_custom_domain auth-required never probed

    Look up the domain in DNS and, if it points at Kulhad, switch the page over to it. Part of Premium. Fails until the record has actually propagated, which is normal for the first few minutes.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string"
        }
      }
    }
    arguments 12 lines
  • get_analytics auth-required 1h ago

    Daily page views, supporters and amounts for the last ninety days, with the rate at which visitors go on to support. Part of Premium.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "days": {
          "type": "integer",
          "default": 30,
          "maximum": 90,
          "minimum": 1,
          "description": "How many days back."
        }
      }
    }
    arguments 13 lines
  • get_custom_domain auth-required 1h ago

    Read whether a custom domain is connected to the page, and what DNS record it needs. Part of Premium.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • get_support auth-required never probed

    Read everything the creator can see about one supporter, by its id.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "From list_supports or list_pending_supports."
        }
      }
    }
    arguments 15 lines
  • get_dashboard_summary auth-required 1h ago

    The headline numbers from the creator dashboard: what came in this month against last, the all-time total, how many supporters there have been, and how many are waiting to be approved.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • update_page_appearance auth-required never probed

    Change the page theme and the announcement banner across the top of it. Page themes, custom theme colours, your own banner colour, hiding the Kulhad badge and a Google Analytics ID are part of Premium.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "theme": {
          "enum": [
            "clay",
            "marigold",
            "ink",
            "diwali",
            "holi",
            "custom"
          ],
          "type": "string",
          "description": "Premium."
        },
        "themeColor": {
          "type": "string",
          "description": "A six-digit colour code starting with a hash, for the custom theme. An empty string clears it."
        },
        "badgeHidden": {
          "type": "boolean",
          "description": "Hide the \"Powered by kulhad\" badge. Premium."
        },
        "occasionText": {
          "type": "string",
          "maxLength": 80,
          "description": "The banner text. Empty string clears it."
        },
        "occasionColor": {
          "enum": [
            "clay",
            "marigold",
            "ink",
            "neel",
            "mor",
            "gulaal",
            "own"
          ],
          "type": "string",
          "description": "The banner colour. \"own\" uses occasionColorHex and is Premium."
        },
        "occasionUntil": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The last day the banner shows, as YYYY-MM-DD. It shows through the whole of that day, India time. Null or an empty string removes the end date."
        },
        "gaMeasurementId": {
          "type": "string",
          "description": "A Google Analytics ID like G-XXXXXXXXXX. Premium. Empty string clears it."
        },
        "occasionColorHex": {
          "type": "string",
          "pattern": "^(#[0-9a-fA-F]{6})?$",
          "description": "The banner colour when occasionColor is \"own\", as a six-digit code starting with a hash. Empty string clears it."
        }
      }
    }
    arguments 64 lines
  • list_supports auth-required never probed

    List supporters, newest first, optionally narrowed by status or by date. Use this for history and for questions about a particular period; use list_pending_supports for the approval queue.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "to": {
          "type": "string",
          "description": "Only up to this date, as YYYY-MM-DD."
        },
        "from": {
          "type": "string",
          "description": "Only from this date onward, as YYYY-MM-DD."
        },
        "page": {
          "type": "integer",
          "default": 1,
          "maximum": 9007199254740991,
          "minimum": 1
        },
        "limit": {
          "type": "integer",
          "default": 25,
          "maximum": 100,
          "minimum": 1
        },
        "status": {
          "enum": [
            "all",
            "claimed",
            "approved",
            "approved_hidden",
            "rejected"
          ],
          "type": "string",
          "default": "all",
          "description": "claimed means waiting for the creator to approve."
        }
      }
    }
    arguments 38 lines
  • update_profile auth-required never probed

    Change the creator name, bio, page address, kind of page, and the links shown on it. Only the fields you pass are changed; anything you leave out stays as it is.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "bio": {
          "type": "string",
          "description": "A short introduction. Plain text; bold, italic and one link are kept, everything else is stripped."
        },
        "kind": {
          "enum": [
            "person",
            "organization"
          ],
          "type": "string"
        },
        "name": {
          "type": "string",
          "maxLength": 60,
          "description": "The name shown on the page."
        },
        "socials": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "platform",
              "url"
            ],
            "properties": {
              "url": {
                "type": "string"
              },
              "platform": {
                "enum": [
                  "instagram",
                  "youtube",
                  "facebook",
                  "x",
                  "threads",
                  "whatsapp",
                  "telegram",
                  "linkedin",
                  "pinterest",
                  "snapchat",
                  "spotify",
                  "discord",
                  "twitch",
                  "reddit",
                  "github",
                  "website",
                  "other"
                ],
                "type": "string"
              }
            }
          },
          "maxItems": 6,
          "description": "Replaces the whole list. Pass an empty array to remove every link."
        },
        "username": {
          "type": "string",
          "description": "The page address, as in kulhad.co/priya. Cannot be changed while a custom domain is connected."
        },
        "uiLanguage": {
          "enum": [
            "en",
            "hi",
            "hi-Latn",
            "mr",
            "ta",
            "te",
            "ml"
          ],
          "type": "string",
          "description": "The creator dashboard language."
        },
        "pageLanguage": {
          "enum": [
            "en",
            "hi",
            "hi-Latn",
            "mr",
            "ta",
            "te",
            "ml"
          ],
          "type": "string",
          "description": "The language the public page is written in."
        }
      }
    }
    arguments 91 lines
  • approve_support auth-required never probed

    Approve one supporter after the creator has found the payment in their own bank app. Approving publishes them on the page unless hidden is set. A thank-you reply can be sent at the same time. Only the creator can know whether the money arrived, so never approve on their behalf without being asked to.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        "reply": {
          "type": "string",
          "description": "A public thank-you, published with them. Refused if the word filter flags it."
        },
        "hidden": {
          "type": "boolean",
          "default": false,
          "description": "Approve without showing them on the public page."
        }
      }
    }
    arguments 23 lines
  • reject_support auth-required never probed

    Reject one supporter, when the creator checked their bank and the payment is not there. They are not published, and the record is cleared away a week later. This cannot be undone.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        }
      }
    }
    arguments 14 lines
  • reply_to_supporter auth-required never probed

    Write or change the public thank-you shown beside a supporter on the page. Does not approve them.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id",
        "reply"
      ],
      "properties": {
        "id": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        "reply": {
          "type": "string",
          "maxLength": 280,
          "description": "Shown publicly beside them on the page."
        }
      }
    }
    arguments 20 lines
  • update_page_behaviour auth-required never probed

    Change what the page does: whether supporters are published automatically, whether people may give without a name, what is shown publicly, the suggested amounts, and the note supporters see after paying.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "amounts": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "amount",
              "label"
            ],
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 24
              },
              "amount": {
                "type": "integer",
                "maximum": 100000,
                "minimum": 1
              }
            }
          },
          "maxItems": 3,
          "minItems": 3,
          "description": "The three suggested amounts and what each is for."
        },
        "amountStyle": {
          "enum": [
            "chai",
            "shagun",
            "nashta",
            "dakshina",
            "patron"
          ],
          "type": "string",
          "description": "Which set of suggested amounts the page offers."
        },
        "autoPublish": {
          "type": "boolean",
          "description": "Publish a supporter straight to the page when they mark a payment as sent, without waiting for approval."
        },
        "cardHeadline": {
          "type": "string",
          "maxLength": 40,
          "description": "The line above the name on share cards."
        },
        "thankYouNote": {
          "type": "string",
          "maxLength": 280,
          "description": "Shown to a supporter after they pay."
        },
        "streamAlertOn": {
          "enum": [
            "approved",
            "claimed"
          ],
          "type": "string",
          "description": "When the stream alert overlay fires. \"approved\" waits until you have looked at a support, which is how every other surface behaves. \"claimed\" fires as soon as someone marks a payment as sent, which is faster but puts a message nobody has read yet on the stream. Only change this to \"claimed\" if the creator has said they want that."
        },
        "allowAnonymous": {
          "type": "boolean",
          "description": "Let people give without leaving a name."
        },
        "showTotalRaised": {
          "type": "boolean",
          "description": "Show the total amount received."
        },
        "counterQrEnabled": {
          "type": "boolean",
          "description": "Offer the printable counter QR, which carries no amount and no message."
        },
        "showSupporterCount": {
          "type": "boolean",
          "description": "Show how many people have given."
        },
        "voiceBlessingsEnabled": {
          "type": "boolean",
          "description": "Let supporters record a short voice message. Premium."
        }
      }
    }
    arguments 83 lines
  • update_seo auth-required never probed

    Set the title and description search engines show for the page, and the image used when the link is shared. Part of Premium. Leaving a field blank goes back to the one Kulhad writes.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "seoTitle": {
          "type": "string",
          "maxLength": 60
        },
        "seoDescription": {
          "type": "string",
          "maxLength": 160
        }
      }
    }
    arguments 14 lines
  • set_saved_replies auth-required never probed

    Replace the list of ready-made thank-you replies the creator picks from when approving a supporter. Part of Premium. At most 7, each up to 280 characters. Passing an empty list removes all of them.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "replies"
      ],
      "properties": {
        "replies": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 280
          },
          "maxItems": 7
        }
      }
    }
    arguments 17 lines
  • list_pending_supports auth-required never probed

    List the supporters who have marked a payment as sent and are waiting for the creator to approve them. Kulhad cannot see a bank account, so this is what people say they sent, not what has been received. The creator checks their own bank app for the amount and the four-character code, then approves.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "default": 25,
          "maximum": 100,
          "minimum": 1,
          "description": "How many to return."
        }
      }
    }
    arguments 13 lines
  • check_username_available auth-required never probed

    Check whether a Kulhad page name is free. A page name is the last part of the address, as in kulhad.co/priya. Use this before suggesting a name to somebody setting up a page.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "username"
      ],
      "properties": {
        "username": {
          "type": "string",
          "description": "The page name to check, without the address around it. For example: priya"
        }
      }
    }
    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 1d3657ca3aa157f3.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/1d3657ca3aa157f3/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/1d3657ca3aa157f3/badge.svg)](https://brick.blue/agent/1d3657ca3aa157f3?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.