{"$schema":"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json","name":"com.fundraiseup/org","version":"1.0.0","title":"Fundraise Up","description":"Read-only MCP server for Fundraise Up: donations, supporters, recurring plans, campaigns, insights.","websiteUrl":"https://fundraiseup.com","remotes":[{"type":"streamable-http","url":"https://mcp.fundraiseup.com/org"}],"_meta":{"com.fundraiseup/tools":[{"name":"get_donation","title":"Get Donation","description":"Get one donation by key: status, amount, supporter, payment method and error. Carries the related recurring plan for an installment and the latest payment error of a failed or retrying donation. Use get_donations to find donation keys."},{"name":"get_donations","title":"Get Donations","description":"List donations, newest first or ranked by amount, filtered by date, campaign, status and more. Each row carries the related supporter, campaign and designation. Optional filters: donation date range, campaign, subaccount, status, donation type, source, payment method, designation and supporter. Every status is listed unless filtered, so for the largest donations of a period sort by amount, descending, with status \"success\": the first page then holds them in one call rather than paging through every donation. These are the largest single gifts, not supporters ranked by their total. Paginated. Matches the Dashboard Donations listing. Totals over a period come from get_donations_stats."},{"name":"get_donations_stats","title":"Get Donations Stats","description":"Get the total raised for a period, optionally against a comparison period. Reports total raised, one-time donations and first installments of recurring plans, each with amount and count. Renewals of existing plans are in the total but in neither part, so the two parts do not add up to the total. Filters by campaign, designation and subaccount keys."},{"name":"get_insights_timeseries","title":"Get Insights Timeseries","description":"Get the total raised per day, week or month, split one-time vs recurring. Per bucket the total amount and donation count, split into one-time and recurring. Matches the Dashboard Insights \"Total raised\" chart. Recurring covers every recurring charge, first installments and renewals alike, so per bucket amount equals oneTime plus recurring. Which granularities a period supports depends on its length; requesting an unsupported one returns an error naming the ones that fit."},{"name":"get_insights_breakdown","title":"Get Insights Breakdown","description":"Split raised by country, device, frequency, payment method or designation. Returns one Insights breakdown section for a period — countries, device, frequencies, payment_methods, designations or tributes — one section per call, chosen by the required `section` argument. Each row carries a key, the total raised, donation count, and one-time and recurring average/median, plus a per-bucket timeseries of amount and count. Each frequencies row is already a single frequency, so its one-time and recurring metrics are null and it reports avgDonation and medianDonation instead. Matches the Dashboard Insights breakdown tables. The timeseries bucket size is chosen automatically from the period length. Amounts are in the account default currency. It has no rows for people: no supporters, donors or P2P fundraisers (use get_supporters, get_supporter or get_insights_fundraisers), and no split by campaign, element, page URL or UTM value (use the tool named for each)."},{"name":"get_insights_agentic_giving","title":"Get Agentic Giving Insights","description":"Get donations placed or referred by AI assistants, per assistant. Two sections for a period: ai_agents (donations placed by an AI agent) and ai_referrals (donors referred from an AI chat), each broken down by AI assistant with total raised, donation count and a per-bucket timeseries. Pass `type` for one section or omit for both; `metric` plots the timeseries by amount or count. Matches the Dashboard Insights Agentic Giving section."},{"name":"get_insights_elements","title":"Get Insights Elements","description":"Get revenue, engagement funnel or fundraiser signups per website element. Returns Insights Elements rows for a period: revenue, engagement or fundraisers, one view per call, one row per element with a per-bucket timeseries. view=revenue gives the money raised and donation count; view=engagement gives the visitor-checkout-supporter funnel; view=fundraisers gives the fundraiser signup funnel of P2P elements. Every row is a website element, never a person: to rank the P2P fundraisers themselves by what they raised, call get_insights_fundraisers. The designations, sources and frequencies filters are applied to the revenue view only."},{"name":"get_insights_fundraisers","title":"Get Insights Fundraisers","description":"Rank P2P fundraisers, the people raising money, by raised or conversion. Sorted by one of raised (amount raised), checkoutViews or conversionRate, chosen by the `sort` argument. Each row is one supporter's personal fundraising page, not a website element; get_insights_elements only reports the signup funnel of the P2P elements. Matches Dashboard Insights Fundraisers."},{"name":"get_insights_retention","title":"Get Insights Retention","description":"Track what became of the recurring plans started in each month, by cohort. Each cohort is the recurring plans started in one month, covering the 12 months ending with the selected month, and each row reports the share of that cohort still active at every elapsed month. Per cohort it carries the cohort month, how many plans started then, and per month offset (0 is the cohort month) the still-active plan count and the percentage of the cohort still active. Every row stops at the selected month or the current month, whichever comes first. Matches the Dashboard Insights recurring-plan Retention chart. Retention tracks plan status, not revenue, so a cohort can recover after plans are paused and reactivated. Cohort data is available only in this report; get_recurring_plans rows do not reproduce these figures."},{"name":"get_insights_utm","title":"Get Insights UTM","description":"Get raised or conversion per UTM value, one row per value of one utmParam. Each row covers the period with a per-bucket timeseries. view=revenue gives the total raised and donation count; view=conversion gives the visitor-checkout-supporter funnel and its rate. The sources filter is ignored by both views, and designations by the conversion view. The timeseries buckets and the row total are rounded independently, so summing the buckets can differ from the total by a cent; the row total is the authoritative figure."},{"name":"get_insights_day_time","title":"Get Insights by Day and Time","description":"Get donations by weekday and hour, one-time and first installments only. A heatmap with one cell per weekday-hour pair (a full 7×24 grid) with the amount raised and the donation count, in the account timezone. Matches the Dashboard Insights \"Day and time\" chart. Counts one-time donations and the first installment of a recurring plan only: renewals are charged on a schedule rather than picked by the supporter, so they carry no donor time of day and the chart leaves them out. Totals are therefore lower than get_insights_timeseries over the same period, which counts every recurring charge."},{"name":"get_supporters","title":"Get Supporters","description":"List supporters (donors) ranked by lifetime donated or donation count. Sorted by totalDonated or donationsCount, descending by default, so the first page is the top supporters. Optional filters: first donation date range, whether the supporter has an active recurring plan, and sub-account. Paginated. Totals are lifetime, not per period; for a period use get_supporters_stats or get_donations. Use search_subaccounts to find sub-account keys."},{"name":"get_supporter","title":"Get Supporter","description":"Get one supporter (donor) by key: totals, dates and recurring plan keys. Returns contact details, first and last donation dates, lifetime donated, donations count, active recurring plans and the campaigns they donated to with a total per campaign. Active plans are capped at 10, with the full count in activeRecurringPlansTotal. Each active recurring plan carries its plan key, amount and frequency, but not its next charge date, installments paid or total collected: pass that key to get_recurring_plan for those. Use get_supporters to find supporter keys."},{"name":"get_supporters_stats","title":"Get Supporters Stats","description":"Count new, returning and active donors for a period, with a comparison. New donors made their first successful donation in the period, returning donors had donated before it, and active supporters is their sum. Pass a comparison period to get the same metrics for it. Filters by campaign and subaccount keys; use search_campaigns / search_subaccounts to find them."},{"name":"get_recurring_plans","title":"Get Recurring Plans","description":"List recurring plans (sustainer subscriptions), newest first, with filters. Each row carries the related supporter, campaign and designation. Optional filters: plan creation date range, status, campaign, subaccount, source, element, amount range, designation and payment method. There is no supporter filter: for one donor's plans start from get_supporter. Paginated. Matches the Dashboard Recurring plans listing. What became of the plans started in a given month is reported by get_insights_retention."},{"name":"get_recurring_plans_stats","title":"Get Recurring Plans Stats","description":"Count active, new, reactivated and cancelled recurring plans, plus MRR. Active plans and MRR (the expected monthly volume of active plans) are measured at the end of the period; new, reactivated and cancelled within it. Pass a comparison period for the same metrics."},{"name":"get_recurring_plan","title":"Get Recurring Plan","description":"Get one recurring plan (subscription) by key, with its next charge date. Returns the status, installment amount and frequency, creation and next charge dates, the supporter, campaign and designation it belongs to, the payment method, and how many installments have succeeded with the total collected so far. Use get_recurring_plans to find recurring plan keys, or take them from a supporter's activeRecurringPlans in get_supporter when the question starts from a donor."},{"name":"get_insights_performance","title":"Get AI Features Performance","description":"Get AI features performance: upsells, cost coverage, recovery, saved plans. Covers pre-donation upsell, post-donation upsell, adaptive cost coverage, abandoned donation recovery, plans saved from cancellation and fraud attempts prevented for a period, each with the revenue or count it produced."},{"name":"get_insights_url","title":"Get URL Insights","description":"Get donation revenue and checkout conversion per page URL (Insights → URLs). One row per page where supporters view and complete donations. view=\"revenue\" gives amounts and donation counts; view=\"conversion\" counts visitors → checkout opens → supporters and their rate, carries no amounts, and ignores the designations, sources and frequencies filters. Every row also carries a per-bucket timeseries of its metrics over the period."},{"name":"search_campaigns","title":"Search Campaigns","description":"Search campaigns by name, key or code. Use this to find campaign keys before calling tools that require campaign keys (e.g. get_donations_stats). Names match partially and case-insensitively, keys and codes by prefix; optionally narrow the search to a single campaign type."},{"name":"get_campaign","title":"Get Campaign","description":"Get one campaign by key: status, type, frequencies, designations and page URL. Use search_campaigns to find campaign keys."},{"name":"search_designations","title":"Search Designations","description":"Search designations by name, key or code. Use this to find designation keys before calling tools that require designation keys. Names match partially and case-insensitively, keys and codes by prefix. Insights breakdown rows are not a designation lookup: they carry no code, and a designation with no donations in the period has no row."},{"name":"search_subaccounts","title":"Search Subaccounts","description":"Search sub-accounts by name or key, or list them all by passing no query. Use this to find sub-account keys before calling tools that accept a subaccount filter."},{"name":"get_company_info","title":"Get Account Info","description":"Get the company account: name, timezone, currency and Donor Portal URL. It carries no donation figures."}]}}