{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "tomfunk--fungible",
    "name": "Fungible",
    "tagline": "Keyboard-first personal finance TUI with Plaid sync and a built-in MCP server and HTTP API.",
    "shortTagline": "Keyboard-first personal finance",
    "description": "Fungible pulls bank transactions through Plaid or CSV into a local SQLite store and shows spending, trends, net worth and financial health in a terminal UI (a desktop GUI shares the data). The same 30-odd tools are exposed as an MCP server (stdio or HTTP) and a REST API, so Claude can categorize, tag, sync and report. MIT.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "invoicing-finance",
    "alternativeTo": [
      "YNAB",
      "Monarch Money",
      "Copilot Money"
    ],
    "shape": "product",
    "formFactor": "cli",
    "executionModel": "hybrid",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "TypeScript"
      ],
      "frameworks": [
        "Ink (TUI)",
        "Electron (GUI)"
      ],
      "packageManager": "npm",
      "database": [
        "SQLite"
      ],
      "hostingTarget": [
        "local machine (Homebrew, installers)"
      ]
    },
    "modelStack": {
      "providers": [
        "Anthropic",
        "OpenAI"
      ],
      "models": [],
      "requiredKeys": [
        "ANTHROPIC_API_KEY",
        "OPENAI_API_KEY"
      ],
      "promptLocations": [],
      "tools": [
        "spending_summary",
        "list_transactions",
        "edit_transaction",
        "add_rule",
        "sync",
        "get_balances",
        "get_financial_health",
        "get_trends",
        "generate_canvas"
      ]
    },
    "repos": [
      {
        "url": "https://github.com/tomfunk/fungible",
        "owner": "tomfunk",
        "name": "fungible",
        "license": "MIT",
        "stars": 108,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": {
      "kind": "mcp",
      "url": "https://github.com/tomfunk/fungible/blob/main/docs/integrations.md",
      "official": true,
      "hosted": "local"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Sync transactions from Plaid",
        "reachable": true,
        "evidence": "tool sync"
      },
      {
        "job": "Import CSV statements",
        "reachable": false,
        "evidence": "no import tool in docs/integrations.md; CSV import is a TUI flow"
      },
      {
        "job": "Categorize and rename with rules",
        "reachable": true,
        "evidence": "tools add_rule, add_name_rule, edit_transaction"
      },
      {
        "job": "Search transactions",
        "reachable": true,
        "evidence": "tool list_transactions"
      },
      {
        "job": "Tags and tag summaries",
        "reachable": true,
        "evidence": "tools tag_transaction, tag_summary, list_tags"
      },
      {
        "job": "Net worth history",
        "reachable": true,
        "evidence": "tools get_balances, get_net_worth_history"
      },
      {
        "job": "Financial health (runway, FIRE)",
        "reachable": true,
        "evidence": "tool get_financial_health"
      },
      {
        "job": "Trends and delta mode",
        "reachable": true,
        "evidence": "tools get_trends, get_drift"
      },
      {
        "job": "Manual assets",
        "reachable": null,
        "evidence": "README feature; no dedicated tool listed"
      },
      {
        "job": "Dedup review of CSV vs Plaid",
        "reachable": false,
        "evidence": "TUI-only screen; no tool"
      },
      {
        "job": "Canvas visualizations",
        "reachable": true,
        "evidence": "tools generate_canvas, show_canvas, list_canvases"
      }
    ],
    "editions": [
      {
        "name": "Free",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/tomfunk/fungible"
          },
          {
            "kind": "installable",
            "url": "https://github.com/tomfunk/fungible#install",
            "command": "brew tap tomfunk/fungible && brew install fungible"
          },
          {
            "kind": "binary",
            "url": "https://github.com/tomfunk/fungible/releases/latest"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or published skill found in the repo."
    },
    "customization": {
      "summary": "Run fungible --setup, then keep Plaid keys, optional model keys, API key and ports in ~/.fungible/.env. Rules and tags are data. Nothing else to change without editing the TypeScript.",
      "envVars": [
        "PLAID_CLIENT_ID",
        "PLAID_SECRET",
        "PLAID_ENV",
        "ANTHROPIC_API_KEY",
        "OPENAI_API_KEY",
        "FUNGIBLE_API_KEY",
        "FUNGIBLE_API_PORT",
        "FUNGIBLE_MCP_PORT",
        "FUNGIBLE_DATA_DIR",
        "FUNGIBLE_BACKUP_DAYS"
      ],
      "configFiles": [
        "~/.fungible/.env"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 11
    },
    "useWhen": [
      "I live in the terminal and want Claude to tidy my transactions and answer 'how much did I spend on travel'",
      "I want a local finance dataset my agent can query without a cloud budgeting service"
    ],
    "accounts": [
      "Plaid developer account (sandbox is enough to try; production for real banks)",
      "Anthropic or OpenAI (optional assistant)"
    ],
    "active": true,
    "lastActivity": "2026-09-03",
    "gotchas": [
      "The desktop GUI does not start the MCP or API servers; use stdio MCP with the GUI",
      "Installers are un-notarized: Gatekeeper and SmartScreen warnings on first launch",
      "Deleting ~/.fungible/key means re-linking every bank"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "terminal UI in TypeScript; a separate Electron GUI shares the data (README)",
      "executionModel": "deterministic finance tools; optional AI assistant with model keys in .env.example",
      "operability": "mcp/server.ts in repo, documented in docs/integrations.md by the Builder",
      "effort": ".env.example and README Storage/Running sections name the variables",
      "editions": "MIT, free; no paid edition",
      "active": "GitHub pushedAt 2026-09-03"
    },
    "confidence": {
      "formFactor": 0.9,
      "executionModel": 0.85,
      "operability": 0.95,
      "effort": 0.85,
      "reach": 0.9,
      "editions": 0.95
    },
    "openQuestions": [
      "Whether manual assets are editable through any tool"
    ],
    "sources": [
      {
        "url": "https://github.com/tomfunk/fungible",
        "foundBy": "sourcing:invoicing-finance:github"
      },
      {
        "url": "https://github.com/tomfunk/fungible/blob/main/docs/integrations.md",
        "foundBy": "analysis:invoicing-finance"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Builder-shipped MCP with a documented tool list; config-only env but a finished personal tool, so Adaptable 2. Personal finance, edge of vertical.",
      "disputed": []
    },
    "url": "apps/tomfunk--fungible.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/tomfunk--fungible.json"
  }
}
