
Give to nonprofits
Fundraise Up for Donors connects your AI assistant to nonprofits that accept donations through Fundraise Up. Ask to support a cause or name an organization: the assistant finds the nonprofit, shows its live campaigns with the organization's own suggested amounts, and prepares a one-time donation on the nonprofit's official Fundraise Up route.
Example path
https://mcp.fundraiseup.com/mcpFundraise Up for Donors lets a donor make a one-time donation to a nonprofit campaign. The tools are called in this order.
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:
The donor named an organization: call to find the nonprofit, then with its organizationId to list that organization's active campaigns. Always use this route when an organization is named — never look an organization up through .
The donor named only a cause: call with a few English keywords naming that cause, to search campaigns across the whole network. Each campaign carries a donor-facing title and description, a donation URL, its default currency, and its one-time amount options. Share this information with the donor as returned — never invent campaign or organization details. Each campaign also carries a designations list, the funds or programs a donation can go to: each entry has a designationId, a name, and isDefault, and the default comes first when there is one.
Let the donor choose an amount. When you ask for the amount, always show every suggested amount from the campaign's one-time amountOptions exactly as provided, in the campaign's currency. The donor may also enter a custom amount (respect minAmount). Only offer to switch currency when the campaign allows it (currencyEnabled). When the campaign's designations list has more than one entry, present the designation options as returned together with the amounts; when it has a single entry, mention that the donation goes to that designation; when it is empty, leave the designation out.
Build the donation session. Call the moment the donor picks a campaign, then to record the amount (and currency) exactly as the donor stated them. Pass only values the donor explicitly stated — never a campaign default — and set the frequency to "once", the only supported value. Once the session state reports feeAmount, tell the donor the processing fee and ask whether they want to cover it so the organization receives the full donation; record their yes/no answer via coverFee. Never compute the fee or the total yourself — always present the server-provided feeAmount and totalAmount. Record the donor's designation choice as designationId via or ; while the session's "missing" list contains designation, the choice is needed before confirmation. Pass no designationId when the list has a single entry or is empty. Keep collecting until paymentMethod is the only entry left in the session's "missing" list.
Finalize. Call to lock in the collected details and retrieve the payment requirements.
Pay. needs a shared payment token (SPT) issued by Stripe Link for the networkId in the confirmed session's paymentRequirements. When no wallet is available, the session's checkoutUrl is the fallback: the donation page with the donor's choices already filled in. When Stripe Link returns a URL for the donor, show it as a markdown link, never as a raw URL: label a wallet-connection link "Connect your Link wallet" and a payment-approval link "Confirm your payment on Link". If Stripe Link reports the step did not succeed, or it has not completed after about ten minutes, stop, tell the donor, and offer them to try again or to finish on the campaign donation page. Never hand the donor a payment approval link that is more than ten minutes old — create a fresh spend request instead, or fall back to the checkout link. Once you hold the token, show the donor the full summary (organization, campaign, amount, currency, frequency, and the total from totalAmount) and call to charge. Set an idempotencyKey before the first call and keep it for every retry of that donation. paymentMethod is recorded asynchronously, so right after the charge it may still show as missing — poll until paymentStatus is "paid" or "failed", at a few-second interval; if it is still pending after about ten minutes, stop polling and tell the donor the payment is still processing — do not charge again. If it is "failed", tell the donor and offer either a retry or the prefilled checkoutUrl; if the session has no checkoutUrl, use the campaign's donationUrl. If errors or times out, read before anything else — the charge may already have gone through — and retry only once paymentStatus is "failed", with the same key.
None in the store listings or on the server