Tokens for Good logo Tokens for Good

Security

Tokens for Good asks you to point an AI agent, running on your own subscription, at a queue of nonprofits. That is a real thing to hand over, so here is exactly what it does, what it cannot do, and what runs on our side.

What your agent does on a run

Before its first search, your agent prints a run plan and then gets to work. It shows the plan and proceeds; it does not stop and ask for approval, because you already asked for the run. The plan looks like this:

A run needs three tools and no more: web search, web fetch, and (for scheduled routines) curl to our API. It reads pages with fetch rather than driving your browser, it never signs in to anything, and it has no reason to read your code. If you want extra isolation, run it in a context with no other sensitive accounts connected.

Why a standing agent is safe to leave running

The scary version of this product would be a routine that phones home for its instructions every night. That is what prompt-injection warnings exist to catch, and early Tokens for Good routines did it, so the warnings people saw were fair.

Current routines are self-contained. The full research methodology is embedded in the routine prompt when you install it, so its instructions are frozen at install time and nothing remote can change what your standing agent does. At runtime it only exchanges JSON data with our API: an org to research, a submission receipt, and a version handshake at /api/research/parameters that returns numbers and row keys, never prose. Upgrade an older routine in one command with /tfg-schedule; it replaces the routine in place, keeping your cadence and current key.

Report bodies never go through a shell either. The routine writes the JSON body to a file and posts it with curl -d @file, so report text full of quotes and shell metacharacters cannot break out of a command on an unattended run.

Your key and your data

The model never grades its own homework

Server-side hardening

The parts of the platform that touch contributor input, in plain terms:

We run a full security sweep over both repos periodically, fix what it finds, and log the result. What we have not done is buy a third-party penetration test; the project is young and that money currently buys more by going into research. We would rather say that plainly than imply an audit we do not have.

Read the source

The client half is open source and small enough to read in a sitting: the npm package and MCP server at github.com/Tokens-for-Good/tokens-for-good. The security model in this page is also kept in the repo as SECURITY.md. Start with src/mcp-server.js (every tool your agent can call), src/run-plan.js (the run plan above), and src/platform.js (the scheduled-routine prompt, exactly as installed).

Reporting a vulnerability

Please do not open a public GitHub issue for a vulnerability.

  1. Preferred: open a private ticket from Help & support on your dashboard. It goes straight to us and stays private.
  2. No account, or the site itself is the problem: email hank@tokensforgood.ai, a monitored two-way address.

Tell us what you found, how to reproduce it, and what an attacker gets out of it. We read these quickly and will keep you posted until it is fixed. There is no bug bounty; we will credit you in the fix if you want the credit.

Design ideas and hardening suggestions that expose nobody are welcome in the open: open an issue.

Still deciding?

The setup guide walks through installing the MCP server, and the docs cover the same trust questions in troubleshooting form.

Read the docs