Open Collective
Query and manage Open Collective accounts, finances, and community data via their public GraphQL API v2.
Endpoint & Auth
- Endpoint:
https://api.opencollective.com/graphql/v2
- Unauthenticated: 10 req/min, public read-only
- Authenticated: 100 req/min — pass
Personal-Token: <token> header
- Token creation:
https://opencollective.com/<your-slug>/admin/for-developers
- Not available via API: Stripe/PayPal payment creation, captcha-protected operations
MCP Server Setup
Use mcp-graphql to expose the OC API as MCP tools. With fnox-backed auth:
claude mcp add opencollective-graphql -- /bin/sh -c \
'unset PYTHONPATH && \
ENDPOINT=https://api.opencollective.com/graphql/v2 \
HEADERS="{\"Personal-Token\":\"$(fnox get OPENCOLLECTIVE_TOKEN --age-key-file ~/.age/key.txt -c ~/v/instance-onboarding/fnox.toml)\"}" \
exec npx mcp-graphql'
Store your token: fnox set OPENCOLLECTIVE_TOKEN <token> --age-key-file ~/.age/key.txt -c ~/v/instance-onboarding/fnox.toml
Quick Start
If opencollective-graphql MCP server is available, use its query-graphql tool. Otherwise use curl.
query { account(slug: "webpack") { name stats { balance { valueInCents currency } } } }
Core Queries
| Query |
Use When |
account(slug) |
Look up any account by slug |
accounts(searchTerm, type, limit) |
Search/browse collectives |
host(slug) |
Look up a fiscal host |
hosts(limit) |
Browse fiscal hosts |
expenses(account, status, limit) |
View submitted expenses |
expense(id) |
Single expense detail |
transactions(account, type, limit) |
View financial activity |
orders(account, status, limit) |
View contributions/donations |
search(searchTerm) |
General search (beta) |
me |
Current authenticated user |
tier(id) |
Sponsorship tier details |
tagStats(searchTerm) |
Explore ecosystem categories |
Core Mutations (all require auth)
| Mutation |
Use When |
createExpense |
Submit expense for reimbursement |
editExpense |
Update existing expense |
processExpense(action) |
Approve/reject/pay expense |
createOrder |
Create contribution/donation |
cancelOrder |
Cancel recurring contribution |
createComment |
Comment on expense/update |
createUpdate / publishUpdate |
Post update to collective |
inviteMember |
Invite someone to join |
followAccount / unfollowAccount |
Follow/unfollow collective |
createWebhook |
Set up notifications |
applyToHost |
Apply collective to fiscal host |
createCollective |
Create new collective |
createTier / editTier |
Manage sponsorship tiers |
Reference Guide
| Topic |
File |
Load When |
| Query Templates |
references/queries.md |
Need ready-to-use GraphQL queries |
| Mutation Templates |
references/mutations.md |
Need to write/modify data |
| Schema Types |
references/types.md |
Need type details for building queries |
| Weird Mutualism |
references/weird-mutualism.md |
Exploring OC's mutualist ecosystem patterns |
Key Patterns
- Pagination: All collections use
limit/offset, return totalCount + nodes
- Account refs:
{slug: "x"}, {id: "uuid"}, or {legacyId: 123}
- Amounts: Always
{ valueInCents: Int, currency: String } — divide by 100 for display
- See
references/queries.md for full filtering examples
Account Types
COLLECTIVE, ORGANIZATION, INDIVIDUAL, FUND, EVENT, PROJECT, HOST, VENDOR
Status Enums
- Expense:
DRAFT → UNVERIFIED → PENDING → APPROVED → PROCESSING → PAID (also REJECTED, ERROR, CANCELED)
- Order:
NEW, PENDING, ACTIVE, CANCELLED, REJECTED, PAID, ERROR, EXPIRED
- Transaction type:
CREDIT (in) / DEBIT (out)
- Transaction kind:
CONTRIBUTION, EXPENSE, ADDED_FUNDS, HOST_FEE, PAYMENT_PROCESSOR_FEE, PLATFORM_FEE
Tips
stats subfields on accounts give quick financial summaries
members(role: [BACKER]) lists financial contributors
tiers shows sponsorship levels; updates shows blog posts
socialLinks has website, twitter, github URLs
1---2name: opencollective3description: Query and interact with Open Collective's GraphQL API v2. Browse collectives, view budgets/transactions/expenses, manage memberships, submit expenses, and explore the open-source funding ecosystem.4license: MIT5---67# Open Collective89Query and manage Open Collective accounts, finances, and community data via their public GraphQL API v2.1011## Endpoint & Auth1213- **Endpoint**: `https://api.opencollective.com/graphql/v2`14- **Unauthenticated**: 10 req/min, public read-only15- **Authenticated**: 100 req/min — pass `Personal-Token: <token>` header16- **Token creation**: `https://opencollective.com/<your-slug>/admin/for-developers`17- **Not available via API**: Stripe/PayPal payment creation, captcha-protected operations1819## MCP Server Setup2021Use `mcp-graphql` to expose the OC API as MCP tools. With fnox-backed auth:2223```bash24claude mcp add opencollective-graphql -- /bin/sh -c \25 'unset PYTHONPATH && \26 ENDPOINT=https://api.opencollective.com/graphql/v2 \27 HEADERS="{\"Personal-Token\":\"$(fnox get OPENCOLLECTIVE_TOKEN --age-key-file ~/.age/key.txt -c ~/v/instance-onboarding/fnox.toml)\"}" \28 exec npx mcp-graphql'29```3031Store your token: `fnox set OPENCOLLECTIVE_TOKEN <token> --age-key-file ~/.age/key.txt -c ~/v/instance-onboarding/fnox.toml`3233## Quick Start3435If `opencollective-graphql` MCP server is available, use its `query-graphql` tool. Otherwise use `curl`.3637```graphql38query { account(slug: "webpack") { name stats { balance { valueInCents currency } } } }39```4041## Core Queries4243| Query | Use When |44|-------|----------|45| `account(slug)` | Look up any account by slug |46| `accounts(searchTerm, type, limit)` | Search/browse collectives |47| `host(slug)` | Look up a fiscal host |48| `hosts(limit)` | Browse fiscal hosts |49| `expenses(account, status, limit)` | View submitted expenses |50| `expense(id)` | Single expense detail |51| `transactions(account, type, limit)` | View financial activity |52| `orders(account, status, limit)` | View contributions/donations |53| `search(searchTerm)` | General search (beta) |54| `me` | Current authenticated user |55| `tier(id)` | Sponsorship tier details |56| `tagStats(searchTerm)` | Explore ecosystem categories |5758## Core Mutations (all require auth)5960| Mutation | Use When |61|----------|----------|62| `createExpense` | Submit expense for reimbursement |63| `editExpense` | Update existing expense |64| `processExpense(action)` | Approve/reject/pay expense |65| `createOrder` | Create contribution/donation |66| `cancelOrder` | Cancel recurring contribution |67| `createComment` | Comment on expense/update |68| `createUpdate` / `publishUpdate` | Post update to collective |69| `inviteMember` | Invite someone to join |70| `followAccount` / `unfollowAccount` | Follow/unfollow collective |71| `createWebhook` | Set up notifications |72| `applyToHost` | Apply collective to fiscal host |73| `createCollective` | Create new collective |74| `createTier` / `editTier` | Manage sponsorship tiers |7576## Reference Guide7778| Topic | File | Load When |79|-------|------|-----------|80| Query Templates | `references/queries.md` | Need ready-to-use GraphQL queries |81| Mutation Templates | `references/mutations.md` | Need to write/modify data |82| Schema Types | `references/types.md` | Need type details for building queries |83| Weird Mutualism | `references/weird-mutualism.md` | Exploring OC's mutualist ecosystem patterns |8485## Key Patterns8687- **Pagination**: All collections use `limit`/`offset`, return `totalCount` + `nodes`88- **Account refs**: `{slug: "x"}`, `{id: "uuid"}`, or `{legacyId: 123}`89- **Amounts**: Always `{ valueInCents: Int, currency: String }` — divide by 100 for display90- See `references/queries.md` for full filtering examples9192## Account Types9394`COLLECTIVE`, `ORGANIZATION`, `INDIVIDUAL`, `FUND`, `EVENT`, `PROJECT`, `HOST`, `VENDOR`9596## Status Enums9798- **Expense**: `DRAFT` → `UNVERIFIED` → `PENDING` → `APPROVED` → `PROCESSING` → `PAID` (also `REJECTED`, `ERROR`, `CANCELED`)99- **Order**: `NEW`, `PENDING`, `ACTIVE`, `CANCELLED`, `REJECTED`, `PAID`, `ERROR`, `EXPIRED`100- **Transaction type**: `CREDIT` (in) / `DEBIT` (out)101- **Transaction kind**: `CONTRIBUTION`, `EXPENSE`, `ADDED_FUNDS`, `HOST_FEE`, `PAYMENT_PROCESSOR_FEE`, `PLATFORM_FEE`102103## Tips104105- `stats` subfields on accounts give quick financial summaries106- `members(role: [BACKER])` lists financial contributors107- `tiers` shows sponsorship levels; `updates` shows blog posts108- `socialLinks` has website, twitter, github URLs