fundraiseup-public-mcp
Registry code: 562a4e0ae95061dd
Fundraise Up for Donors lets a donor make a one-time donation to a nonprofit campaign. The tools are called in this order.
1. Find a campaign. When the connector returns no match, tell the donor plainly that the network has no matching campaign. Choose the entry point by what the donor named:
- endpoint
- https://mcp.fundraiseup.com/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 fundraiseup-public-mcp live?
- Yes — it answered the hub's last check (checked 3h ago). It answered 100% of checks over the last 30 days.
- Is fundraiseup-public-mcp free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does fundraiseup-public-mcp have?
- 8 tools: search_campaigns_by_intent, confirm_donation_session, create_donation_session, update_donation_session, get_campaigns, attach_payment_token, get_donation_session_status, get_organizations.
- Is fundraiseup-public-mcp 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.
90 days 100%· all time 100%
last good check
of 8 tools
- unknown → live
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.
through this hub
successful
what callers paid
Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run
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_campaigns_by_intent unknown never probed
Find nonprofit campaigns to donate to by cause when no organization is named. Call it only when the donor asks to donate to a cause; pass a few English keywords naming that cause, never the donor's message or the conversation. If the donor did name an organization, use get_organizations and then get_campaigns instead — this is a keyword search across the whole network, not a lookup by organization name. Each result carries the same fields as get_campaigns plus the organization running it; name that organization beside every campaign you offer. Pass the donation URL on exactly as returned, including its query string — never shorten it. Results are live campaigns of nonprofits that opted in to donations through AI assistants and can take payment; the search has no location filter, so a campaign from another country is still a valid offer. Show amount descriptions as-is when present and never invent one. Only campaigns that accept one-time donations are returned. Each campaign carries the same designations list as in get_campaigns.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "intent" ], "properties": { "limit": { "type": "integer", "default": 10, "maximum": 50, "minimum": 1, "description": "Maximum number of campaigns to return" }, "intent": { "type": "string", "maxLength": 100, "description": "A few English keywords naming the cause, for example \"clean water\" or \"animal shelter\"; never the donor's message, the conversation, or personal details" } } }arguments 21 linesconfirm_donation_session unknown never probed
Finalize the collected donation details and retrieve everything needed to pay. Call this once the donation conditions are collected — paymentMethod is the only entry left in the session's "missing" list. Returns the session state plus paymentRequirements for the payment step; its amount is in minor currency units and includes the fee when the donor covers it. Confirming charges nothing; only attach_payment_token completes the payment, and only with a token the donor approved. The agent never authorizes the payment. The donor approves the spend in Stripe Link's own interface, which the donor controls; the agent only forwards the token that approval produced. checkoutUrl is a fallback for when no wallet is available. While "missing" contains designation, the donor's designation choice has to be recorded through update_donation_session first. If the chosen designation is no longer available, the call returns invalid_designation and clears the choice.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "sessionId" ], "properties": { "sessionId": { "type": "string", "description": "Donation session identifier as returned by create_donation_session" } } }arguments 13 linescreate_donation_session unknown never probed
Create a donation session the moment the donor picks a campaign. Only campaignId is required; the organization is derived from the campaign. Pass amount and currency only when the donor explicitly stated them — never a campaign default. Frequency is always "once", the only supported value, and has to be set explicitly before confirmation. Creating a session charges nothing. The response reports the session state and what is still missing before payment. When the campaign's designations list has more than one entry and the donor already chose one, pass it as designationId; pass none for a list with a single entry or an empty list.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "campaignId" ], "properties": { "amount": { "type": "number", "description": "Donation amount in major currency units (e.g. 50 for $50); pass only if the donor stated it", "exclusiveMinimum": 0 }, "currency": { "type": "string", "maxLength": 3, "minLength": 3, "description": "ISO 4217 code of a currency the organization accepts; pass only if the donor stated it" }, "frequency": { "type": "string", "const": "once", "description": "Donation frequency; only \"once\" is accepted and the session stays incomplete until it is sent — always pass \"once\"" }, "campaignId": { "type": "string", "description": "Campaign identifier as returned by get_campaigns; never taken from a donation URL" }, "designationId": { "type": "string", "minLength": 1, "description": "Key of the campaign designation the donor chose, as designationId from the campaign designations list; pass only the donor's choice" } } }arguments 34 linesupdate_donation_session unknown never probed
Record the donation conditions as the donor states them. Fill in amount, currency, and the cover-fee decision as the donor explicitly stated them — never a campaign default. The frequency is always "once", the only supported value; set it here if it was not set at creation. Once the session state reports feeAmount, show it to the donor and record their answer via coverFee. Values are validated against the campaign and the response reports whether everything is collected for payment. Updating a session charges nothing. When the campaign's designations list has more than one entry, record the donor's choice as designationId; the session state reports it under designation. Pass no designationId for a list with a single entry or an empty list.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "sessionId" ], "properties": { "amount": { "type": "number", "description": "Donation amount in major currency units (e.g. 50 for $50); pass only if the donor stated it", "exclusiveMinimum": 0 }, "coverFee": { "type": "boolean", "description": "Whether the donor covers the processing fee. Ask after the session state reports feeAmount; pass only the donor's explicit yes/no answer" }, "currency": { "type": "string", "maxLength": 3, "minLength": 3, "description": "ISO 4217 code of a currency the organization accepts; pass only if the donor stated it" }, "frequency": { "type": "string", "const": "once", "description": "Donation frequency; only \"once\" is accepted and the session stays incomplete until it is sent — always pass \"once\"" }, "sessionId": { "type": "string", "description": "Donation session identifier as returned by create_donation_session" }, "designationId": { "type": "string", "minLength": 1, "description": "Key of the campaign designation the donor chose, as designationId from the campaign designations list; pass only the donor's choice" } } }arguments 38 linesget_campaigns unknown 3h ago
List an organization's campaigns that accept donations, with amounts and links. Call it with the organizationId from get_organizations; results are paginated, ranked by activity (by relevance when query is set), and carry the donor-facing title and description, a ready donation URL, and the one-time donation conditions. An unknown organizationId is an error, not an empty list. When more than one campaign could fit the donor's intent, let the donor choose rather than picking one for them. Only campaigns that accept one-time donations are returned. Show the donor every suggested amount exactly as returned, in the campaign's currency, and pass the donation URL on exactly as returned, including its query string — never shorten it. Show amount descriptions as-is when present and never invent one. Each campaign carries a designations list (designationId, name, isDefault; the default first): with more than one entry the donor chooses one, with a single entry the donation goes to that designation, and an empty list means no designation applies. When pagination.total is larger than the number of campaigns returned, tell the donor the total and offer to show more or to search for a specific campaign. When the campaign the donor asks for is not on the page, pass query; if nothing is found, retry once with other keywords, then tell the donor you could not find it, never that the organization does not have it, and let them choose from the campaigns this tool returns without query.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "organizationId" ], "properties": { "page": { "type": "integer", "default": 1, "maximum": 1000, "minimum": 1, "description": "Page number (1-based)" }, "query": { "type": "string", "maxLength": 100, "description": "A few keywords naming the campaign or the cause the donor asked for; never the donor's message, the conversation, or personal details. Omit it to list all campaigns" }, "perPage": { "type": "integer", "default": 25, "maximum": 25, "minimum": 1, "description": "Number of campaigns per page" }, "organizationId": { "type": "string", "description": "Organization identifier as returned by get_organizations, or published in the organization's agentic-giving.md" } } }arguments 32 linesattach_payment_token unknown never probed
Complete a donation the donor approved in Stripe Link with the returned token. The spt is a shared payment token issued by Stripe Link for paymentRequirements.amount in paymentRequirements.currency, approved by the donor. The agent never authorizes the payment. The donor approves the spend in Stripe Link's own interface, which the donor controls; the agent only forwards the token that approval produced. Never construct a token yourself or use raw card details. Call only after confirm_donation_session succeeded. Never hand the donor a payment approval link that is more than ten minutes old — create a fresh spend request instead. Show the donor the full summary (organization, campaign, amount, currency, frequency, and the total from totalAmount) before this call. A donation session can be paid only once, so a second donation needs a new session. A successful result is not proof of payment: it carries no payment status. If this call errors or times out without returning, read get_donation_session_status before retrying — the payment may already have gone through — and retry with the same idempotencyKey only once paymentStatus is "failed".
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "sessionId" ], "properties": { "spt": { "type": "string", "minLength": 1, "description": "Shared payment token (SPT) that Stripe Link returns once the donor approves the spend request, scoped to paymentRequirements.networkId from confirm_donation_session; raw card credentials are never accepted" }, "sessionId": { "type": "string", "minLength": 1, "description": "Donation session identifier as returned by create_donation_session" }, "idempotencyKey": { "type": "string", "description": "Key identifying this charge attempt, passed to the payment provider. Set one before the first call and reuse it on every retry of the same donation; a new key does not make a second charge possible, since the session can be charged only once" } } }arguments 23 linesget_donation_session_status unknown 3h ago
Check a donation session's payment status and what is still missing. The payment status is pending, paid, or failed. paymentMethod is recorded asynchronously and may still show as missing right after a charge. After payment has been attached, poll this tool until paymentStatus is "paid" (donation completed) or "failed" — do not report the donation as done until then. If paymentStatus is "failed", offer the donor a retry through the agent or, as a fallback, the session's checkoutUrl. Report the outcome from the session state only; never invent amounts, unit costs, or delivery promises.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "sessionId" ], "properties": { "sessionId": { "type": "string", "description": "Donation session identifier as returned by create_donation_session" } } }arguments 13 linesget_organizations unknown 3h ago
Find a nonprofit to donate to by name. Pass only the organization's name as the donor gave it, never the donor's message or the conversation. Start here whenever the donor names an organization, then call get_campaigns with the match — do not look a named organization up through search_campaigns_by_intent. Matches nonprofits that opted in to donations through AI assistants by name. Returns up to 5 organizations; an empty list means no match. If more than one could be the organization the donor means, let the donor choose rather than assuming. No match is not an error: widen the query or ask the donor to name the organization; if the network has no match, tell the donor there is none.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "query" ], "properties": { "limit": { "type": "integer", "default": 5, "maximum": 5, "minimum": 1, "description": "Maximum number of organizations to return" }, "query": { "type": "string", "maxLength": 100, "description": "Name of the organization the donor named, for example \"Red Cross\"; only the name, never the donor's message, the conversation, or personal details" } } }arguments 21 lines
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.
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.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - 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. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id562a4e0ae95061dd.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/562a4e0ae95061dd/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/562a4e0ae95061dd?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.
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.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- 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.