Every.org MCP
# Every.org MCP
Open-source MCP server for the [Every.org Charity API](https://docs.every.org/docs/intro). It searches nonprofits, reads fundraisers, and builds donate links. Donors still complete gifts on Every.org. This server does not charge cards or create fundraisers.
## Tools
| Tool | What it returns |
| --- | --- |
| `list_causes` | Cause slugs published by Every.org |
| `search_nonprofits` | Name, EIN, slug, short description, causes, profile URL |
| `get_nonprofit` | The same fields plus the nonprofit UUID and whether it can receive funds |
| `browse_nonprofits` | A page of nonprofits for one cause |
| `build_donate_link` | An Every.org URL the donor opens to give |
| `get_fundraiser` | Fundraiser title, slug, description, and page URL |
| `get_fundraiser_raised` | Amount raised in cents and US dollars |
Donate-link amounts are US dollars. These tools only read public data or build a URL, so they all use one Every.org public key configured on the server.
## Key
Set your public key from the [Every.org developer dashboard](https://www.every.org/charity-api):
```
EVERY_ORG_PUBLIC_KEY=your_public_key
```
Callers do not send a key. Every request uses that server public key. Keep it out of git.
## Local stdio
```bash
npm install
npm run stdio
```
Cursor config, from this directory:
```json
{
"mcpServers": {
"every-org": {
"command": "npm",
"args": ["run", "stdio"],
"env": {
"EVERY_ORG_PUBLIC_KEY": "your_public_key"
}
}
}
}
```
After install, `npx every-org-mcp` starts the same stdio server.
## Vercel
This repo is a Next.js app. The MCP endpoint is `/api/mcp`.
1. Import the project in Vercel. The build command is `next build`.
2. Set `EVERY_ORG_PUBLIC_KEY` in the project environment.
3. Connect with the URL only:
```json
{
"mcpServers": {
"every-org": {
"url": "https://YOUR_DEPLOYMENT.vercel.app/api/mcp"
}
}
}
```
The same URL works as a Claude or ChatGPT custom connector with no authentication. The HTTP handler is stateless. Each request calls `partners.every.org` with the server public key.
## Development
```bash
npm test
npm run dev
```
`npm test` uses mocked Every.org responses. It does not call the live API.
Public endpoints are rate-limited per key: nonprofit details at 100 requests per minute, search and browse at 500. See the [nonprofits docs](https://docs.every.org/docs/endpoints/nonprofits) and [fundraisers docs](https://docs.every.org/docs/endpoints/fundraisers).
TDQS
Scored across 7 tools
Tools target distinct resources and actions: list_causes, search_nonprofits, browse_nonprofits, and get_nonprofit are clearly different. Minor potential overlap exists between get_fundraiser and get_fundraiser_raised, but descriptions clarify their separation.
All tools follow a consistent snake_case verb_noun pattern (e.g., list_causes, search_nonprofits, get_nonprofit). No deviations or mixed conventions.
7 tools is well-scoped for a nonprofit discovery and donation-link service. Each tool earns its place without redundancy.
The surface covers nonprofit search, browse, details, causes, donate links, and fundraiser details/raised amounts. A minor gap is the lack of a tool to discover or list fundraisers for a nonprofit, which could hinder agents without a known fundraiser slug.