Are you the author? Sign in to claim
MCP server that matches your game to publishers, VCs, dev funds and grants — 210+ funding sources from the GameFunds d
MCP server for browsing a local copy of the GameFunds directory (publishers, grants, VCs) and tracking your personal outreach pipeline.
Does:
Does not:
genre_signal: none is honest, not a bugconfidence: lowThirteen tools, grouped by what they touch. Catalog tools are public (read scope); pipeline tools are private to the server owner (write scope).
| Tool | Scope | What it does |
|---|---|---|
match_project | read | Rank funding sources for a project (genre, budget, stage, country). Returns candidates grouped by funding type — see Scoring. |
search_funding | read | Full-text search over the catalog. Hyphens/slashes/& are safe (turn-based, hack & slash). |
filter_funding | read | Structured filter: section, country, budget tier, comm rating, has-email. |
get_entity | read | Full record for one source: links, contact, submission path, notes, amounts. |
get_submission_brief | read | How to pitch a specific source: channel, submission links, stated criteria, hard filters, portfolio. |
get_pitch_rubric | read | Deck rubric tailored to the target's funding type (publisher / VC / project investor / grant), derived from the upstream pitch tutorial. |
review_pitch | read | Deterministic deck check: missing slides, missing numbers, hard-filter violations. It stays quiet on a solid deck — it does not pad. |
gamefunds_help | read | Guidance topics + a bridge to the concept guides (gamefunds://guide/*). |
check_updates | read | Cheap SHA check for upstream directory changes. |
set_status | write | Set a pipeline status (contacted, in_talks, signed, …) for a source. |
add_note | write | Append a dated note to a pipeline entry. |
list_pipeline | write | Your outreach state; stale_days=N surfaces overdue follow-ups. |
sync_directory | write | Re-sync the directory + guides from upstream. |
match_project uses a deterministic heuristic — no LLM. Results are grouped by
funding type (publisher, vc_equity, project_investor, grant), and scores are
comparable only within a group: a grant scoring 15 is not "worse" than a publisher
scoring 66, they are different funding paths.
Each candidate carries a breakdown (budget / country / stage / genre / comm), a
confidence (high / medium / low), and human-readable reasons. Two design
choices are worth knowing:
breakdown.budget: null and confidence: low mean the
catalog lacks the data, not that it scored poorly. genre_signal: none means no
catalog entry matches your genre at all — the ranking is then budget-and-stage only,
flagged with genre_warning, and you should verify by hand.Hard filters remove sources that cannot work (counted in hard_filtered): budget
off by 2+ tiers, a grant outside your country, or a genre-exclusivity clash (a
sandbox game against a publisher that says "strictly no sandbox", a cozy sim against
"horror only"). These are dropped, not down-ranked.
The full weight table lives in data/help/scoring.md and is available at runtime via
gamefunds_help("scoring").
Directory data comes from github.com/GameDevGrzesiek/GameFunds © Grzegorz Wątroba, MIT license.
data/rubrics.json is derived from Grzegorz's PitchDeckTutorial.md in that repository.
Grzegorz is a working game dev — his game is Foxy Dumplings on Steam. If this tool is useful to you, wishlisting it is a good way to say thanks.
The database (data/gamefunds.db) and synced guides (data/guides/) are not in git — run gamefunds sync --apply on first use.
Your pipeline (publisher contacts, notes) lives only in your local DB and must never be committed.
git clone <this-repo>
cd gamefunds-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
gamefunds sync --apply
If gamefunds sync returns a GitHub 403 rate limit error, set an unscoped personal access token and retry:
export GITHUB_TOKEN=<token> # no scopes needed — the upstream repo is public
gamefunds sync --apply
Create a token at github.com/settings/tokens (classic, no checkboxes). Sync uses at most one api.github.com call per run; guide files are fetched from raw.githubusercontent.com (outside the 60/h unauthenticated API quota).
Stdio mode needs no GAMEFUNDS_TOKEN. Auth applies only to HTTP transport.
Paths to the database, guides, and logs are resolved from the package install location (not the process cwd). Override with GAMEFUNDS_DATA_DIR if needed (e.g. Docker volume at /app/data).
One command, from any directory:
claude mcp add gamefunds -- /absolute/path/to/gamefunds-mcp/.venv/bin/python -m gamefunds.server
Use the absolute path to the virtualenv's Python, not bare python — the agent
launches the server as a subprocess and will not inherit your activated venv.
Add --scope project to write it into the project's .mcp.json (shareable with a
team) instead of your personal config.
Create .mcp.json in your project root:
{
"mcpServers": {
"gamefunds": {
"command": "/absolute/path/to/gamefunds-mcp/.venv/bin/python",
"args": ["-m", "gamefunds.server"]
}
}
}
cwd is optional — data paths resolve from the package install location, not the process working directory.
If you deployed the server (see HTTP deployment):
claude mcp add --transport http gamefunds https://your-host.example/mcp \
--header "Authorization: Bearer $GAMEFUNDS_TOKEN"
Edit the config file directly, then restart the app:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"gamefunds": {
"command": "/absolute/path/to/gamefunds-mcp/.venv/bin/python",
"args": ["-m", "gamefunds.server"]
}
}
}
cwd is optional — data paths resolve from the package install location, not the process working directory.
Same JSON as above, in .cursor/mcp.json (per project) or ~/.cursor/mcp.json (global).
In Claude Code, run /mcp — gamefunds should be listed as connected, exposing
13 tools and 6 resources. If it is not, check that gamefunds sync --apply has run
and that the Python path is absolute.
Editing the server code? The agent starts the server once and keeps the process alive. Code changes are not picked up until you reconnect (
/mcp→ reconnect, or restart the agent). Testing against a stale process is the fastest way to conclude a working fix is broken.
The tools are self-describing, so plain language works:
I'm making a cozy pottery sim. Two-person studio in Poland, $180k budget,
vertical slice done. Where should I look for funding?
What does Team17 want in a pitch, and how do I submit to them?
Review this deck for Whitethorn Games: <paste your pitch deck as markdown>
Log that I sent Kiln to Anshar today, follow up in two weeks.
Genre matching works against an English catalog — describe the genre in English
(cozy crafting sim, turn-based tactics), even if you talk to the agent in another
language. If nothing in the catalog matches your genre, match_project tells you so
(genre_signal: none) rather than inventing a shortlist.
| Command | Purpose |
|---|---|
gamefunds sync | Dry-run upstream sync |
gamefunds sync --apply | Download directory + guides into local DB |
gamefunds check | Cheap SHA check for upstream updates |
gamefunds stats | Entity and pipeline counts |
gamefunds token | Generate a full HTTP token (GAMEFUNDS_TOKEN) — do not share |
gamefunds token --readonly | Generate a shareable catalog-only token (GAMEFUNDS_TOKEN_READONLY) |
gamefunds serve --transport http | Run HTTP server (requires token) |
HTTPS is mandatory. A bearer token sent over plain HTTP is visible on the first request. Never expose HTTP publicly without TLS termination.
The server refuses to start in HTTP mode without GAMEFUNDS_TOKEN. Full and read-only tokens must be different values.
Private owner token (GAMEFUNDS_TOKEN) — write access + pipeline visibility. Never publish this.
gamefunds token # FULL token — Do NOT share
export GAMEFUNDS_TOKEN=...
Shared read-only token (GAMEFUNDS_TOKEN_READONLY) — catalog only; safe to post on a forum or demo. Pipeline tools are refused; get_entity omits pipeline data.
gamefunds token --readonly # SAFE to share publicly
export GAMEFUNDS_TOKEN_READONLY=...
Never publish GAMEFUNDS_TOKEN — it exposes your pipeline. Share only the read-only token.
gamefunds serve --transport http --port 8080
Generate .env from .env.example and set both variables as above.
Owner token: 60 requests/minute (GAMEFUNDS_RATE_LIMIT). Shared read-only token: 300/minute (GAMEFUNDS_RATE_LIMIT_READONLY) — higher because many forum users share one token. One LLM conversation uses ~10–50 tool calls. Limits are keyed by SHA-256 hash of the bearer token — the raw token never appears in logs or rate-limit storage.
cp .env.example .env # set GAMEFUNDS_TOKEN
docker compose up -d --build
127.0.0.1:8080 by default — put nginx, Caddy, or Traefik in front with TLSGAMEFUNDS_DATA_DIR (default /app/data in the image) holds DB, synced guides, and logs — mount it as a volumegamefunds sync --apply if no DB exists| Scope | Tools |
|---|---|
read | search, filter, get_entity (catalog only — no pipeline block), match_project, briefs, rubrics, review_pitch, help, check_updates |
write | set_status, add_note, list_pipeline, sync_directory; get_entity includes pipeline |
Read-only tokens calling pipeline tools get a clear message pointing to the open-source repo — not a 500, and no private data.
pip install -e ".[dev,http]"
pytest
GAMEFUNDS_TOKEN set before HTTP start.env not committed (in .gitignore)data/*.db and data/guides/ not committedGAMEFUNDS_LOG_ARGS=0 in production (default — no argument logging)MIT — see LICENSE. GameFunds directory data © Grzegorz Wątroba, used under MIT with attribution.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows