Charity verification is a domain where the wrong phrasing does harm — "not found" and "revoked" mean very different things to someone about to donate, and a model left to its own devices will blur them. Shipping the decision tree and the response templates alongside the tools is the difference between a lookup API and something you would put in front of a donor.
An MCP server over CharityAPI, which fronts the IRS nonprofit database. Three tools cover the verification questions people actually ask, and the server ships a set of prompt templates that give an assistant a decision tree for using them — which tool fits which situation, what to do when a status comes back revoked, and how to phrase the answer.
- `charity_lookup` — the full IRS record for one organisation by `ein`, including tax-deductibility status and codes, classification and activity codes, and the current ruling
- `charity_search` — find organisations by `query`, `city` or `state` when you do not have the EIN, with `limit` and `offset` for pagination
- `public_charity_check` — a direct yes-or-no on whether an organisation qualifies as a tax-deductible public charity
- 14 specialized prompt templates, split between verification workflows and quick reference — including a red-flag guide for revoked, conditional and suspended organisations, and response templates for verified, failed and not-found outcomes
- EIN format validation, so a malformed identifier fails locally with a message rather than as an API error
A CharityAPI account and its API key, supplied as `CHARITY_API_KEY`, with `CHARITY_API_BASE_URL` pointing at `https://api.charityapi.org`. Node.js 18 or higher; `npm install` and `npm run build` from a clone, then point the client at `build/index.js` over stdio. Rate limiting defaults to 100 requests per minute and is configurable through `RATE_LIMIT_REQUESTS_PER_MINUTE`.
Build from source — clone the repository and build it, then point your client at the binary
