Skip to main content
Sign in

MCP server

Together exposes a remote MCP (Model Context Protocol) server so an AI assistant like Claude can work with your organisation's data directly - reading donors, donations and revenue, and taking safe actions on your behalf.

The MCP server is in beta and switched on per organisation. If a connection is refused with an authorization error, your organisation is not yet enrolled - contact support to be added.

Endpoint

The server speaks Streamable HTTP at a single endpoint:

https://alltogether.giving/api/mcp

It authenticates with the same API key you use for the REST API - create one in Settings > API. A READ key can use the read tools; a WRITE key additionally unlocks the action tools. The key identifies both the caller and the organisation; all data is scoped to that organisation.

Connecting a client

Most MCP clients accept a server URL plus an Authorization: Bearer header. For example, to add the server to Claude Code:

claude mcp add --transport http together \
  https://alltogether.giving/api/mcp \
  --header "Authorization: Bearer pc_your_key_here"

In Claude.ai or Claude Desktop, add a custom connector with the endpoint URL and supply the API key as a request header. Treat the key like a password - anyone holding it can read your organisation's data.

Connecting with sign-in (OAuth, beta)

Enrolled organisations can also connect Claude with a sign-in flow instead of a pasted key. Add the same endpoint URL as a custom connector without a header; Claude registers itself, sends you to sign in to Together, and asks you to approve access. The connection then acts as you - it can do what your role allows (viewers get read-only), and the actions are attributed to your account.

No key to copy or store, and you can disconnect at any time. The sign-in flow needs a public address, so it works from Claude.ai and Claude Desktop - not against a local development server.

Tools

ToolWhat it does
together_donors_listFind a donor by name with search, or list donors filtered by exact email, donor type, or a created-at range. Cursor-paginated. A search needs at least three characters, matches each word across first name, last name, email and organisation name, and returns live donors only - so it is broader than the search on the in-app donors page, and its counts will not reconcile against an unfiltered list. To answer "my top donors by lifetime spend" pass segment (a slug from together_segments_list, needs the Grow plan) and sort (lifetime_given, last_90_days, last_donation, name or email; prefix - for descending). Sorted or segment-filtered results are a single page - the value sorts return a top-100 and need a segment or a 3+ character search.
together_donor_getFetch one donor by id, with profile and giving summary.
together_donations_listList donations (confirmed by default). Filter by donor, source, revenue code, or date range. Amounts are gross, in the currency the response reports. Returns a summarywith a DB-computed total over the whole filter (not just the page), so totals aren't hand-summed.
together_donation_getFetch one donation by id.
together_revenue_codes_listList revenue (attribution) codes.
together_campaigns_listList personalised-ask campaigns - the way to find the campaign id that campaign stats needs. Requires the Raise plan.
together_campaign_statsRealised-revenue stats for a personalised-ask campaign. Requires the Raise plan.
together_revenue_summaryTotal confirmed donations received in a date range, net of refunds, before platform fees, in your organisation's currency. Filter by donor, revenue code, source or status, and optionally group_by revenue code or source for a breakdown.
together_worklistThe donors worth acting on today, ranked by the dollar opportunity in reaching them, with a suggested ask and a plain-English reason for each. Read-only. Requires the Grow plan.
together_donor_intelligenceOne donor's giving band, suggested ask and the reasons behind it. For a Compliance-add-on organisation it also returns how much room the donor has left under each donation cap - report it as given and link to the authoritative record; never treat it as a target. Read-only. Requires the Grow plan.
together_segments_listList the organisation's computed segments with their member counts - the way to find the segment slug that together_donors_list's segment filter needs. Read-only. Requires the Grow plan.
together_contact_logs_listList logged contacts with donors - calls, meetings, emails - filtered by donor, method, or outstanding follow-up. Note bodies are deliberately left out of the list; each entry says whether it has one.
together_contact_log_getFetch one contact log entry by id, including its note. Use it for the entries whose notes you actually need, and to read back one you just recorded.
together_org_getYour organisation's name, timezone and default currency, so the assistant reports dates and money the way you do.
together_compliance_overviewDonors approaching a cap and upcoming or overdue disclosure obligations, per jurisdiction. Requires the Compliance add-on.
together_donor_complianceOne donor's cap status per jurisdiction and open disclosure obligations. Requires the Compliance add-on.
together_generate_ask_linkMint a personalised, donor-locked donation link for a form (WRITE). The returned URL is credential-bearing.
together_contact_log_addRecord a contact with a donor - a call, meeting or email - with an optional follow-up (WRITE).

How it relates to the REST API

Most tools are backed by the same /api/v1 endpoints (the compliance tools and the revenue summary are MCP-only), so they apply the identical plan gating, validation, rate limiting and audit logging. The MCP server is a natural-language front door, not a separate set of permissions. Tools with a plan requirement (for example campaign stats on Raise) return a plan error rather than silently degrading.

Errors differ, though. A tool backed by /api/v1passes the API's error envelope through, so its code reaches you unchanged. The three MCP-only tools (the two compliance tools and the revenue summary) have no REST sibling to inherit an envelope from: they return plain text with no error code - the reason your input was rejected where the fix is yours to make, and an unspecific "failed unexpectedly" otherwise, with the detail reported to Together rather than returned.

Related

  • API reference - the endpoints every tool is backed by.
  • Rate limits - tool calls share the same limiter model.
  • Errors - the error codes an API-backed tool surfaces on failure (MCP-only tools return plain text with no code).