financial-products
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@financial-productsshow me low-risk treasury products available in the US"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
financial-products-mcp
An MCP server for credit, wealth, insurance and treasury products, with three kinds of user:
User type | Can | Tools (in addition to the catalog tools) |
Consumer | Use financial products |
|
Developer | Build app experiences around financial products |
|
Innovator | Create, test and publish financial products |
|
Everyone (including guests without a token) gets the catalog tools: whoami, list_products, get_product, list_categories, list_apps, plus the resource financial-products://catalog.
Tools are registered per user, so a client only sees the tools its roles allow. A user can hold more than one role.
Product lines
Every product has a product_line:
credit: cards, personal/home/auto/education/gold loans, BNPL, working-capital loans
wealth: mutual funds, ETFs, REITs/InvITs, stocks, retirement accounts, government savings schemes
insurance: term/whole life, health, motor, home, travel, ULIPs, annuities
treasury: deposits, sweep accounts, liquid/money-market funds, T-bills, commercial paper, government and corporate bonds, FX forwards, interest-rate swaps, derivatives
list_products filters by product_line, category, region (IN, US, global), risk_level or free text, and list_categories returns counts for each. The bundled catalog has 50 product types.
Each product has: id, name, product_line, category, region, risk_level, liquidity, typical_horizon, return_type, regulator, description, key_features.
Related MCP server: OpenFin MCP
Innovator workflow: create → test → publish
create_productsaves a draft, visible only to its creator.test_productruns the checks: required disclosures (description, regulator, at least 2 features), valid enums, product-line rules (credit usescost_of_creditand risknot_applicable; insurance uses protection, guaranteed or market-linked returns), and a misleading-claims check that fails market-linked products promising "guaranteed", "assured" or "risk-free" returns.publish_productlists it in the catalog. It is allowed only if the latest test passed and the product hasn't changed since. Editing a product means re-testing it.unpublish_producthides it again. Existing enrollments are kept, new ones are blocked, and developers' apps flag it underunavailable_product_ids.
Bundled catalog products are read-only and pass the same checks.
Install & build
Requires Node.js 22.13+ and a Postgres database. Supabase (self-hosted or cloud) is the intended backend; any Postgres 15+ works.
git clone https://github.com/never2average/financial-products-mcp.git
cd financial-products-mcp
npm install
npm run buildUsers and tokens
Users, roles, products, enrollments and apps are stored in Postgres (Supabase), in a dedicated financial_products schema. Supabase's auto-generated REST API only exposes public, so this data isn't reachable through it. Set DATABASE_URL to the connection string; the schema is created on first start. If the schema already exists and is owned by the app's role (as the deploy script sets it up), the role needs no database-level privileges.
Create users with the CLI. Each command prints a token once; only its hash is stored.
export DATABASE_URL=postgres://user:password@host:5432/postgres
node dist/index.js users add --name "Asha" --role consumer
node dist/index.js users add --name "Dev" --role developer
node dist/index.js users add --name "Ines" --role innovator
node dist/index.js users add --name "Max" --role consumer --role innovator # several roles
node dist/index.js users listRun it
Locally over stdio (one user per client)
Pass the user's token in FINANCIAL_PRODUCTS_TOKEN. Without it, the server runs as a read-only guest.
Claude Code:
claude mcp add financial-products -e DATABASE_URL=postgres://... -e FINANCIAL_PRODUCTS_TOKEN=fpm_... -- node /absolute/path/to/financial-products-mcp/dist/index.jsClaude Desktop / other clients:
{
"mcpServers": {
"financial-products": {
"command": "node",
"args": ["/absolute/path/to/financial-products-mcp/dist/index.js"],
"env": { "DATABASE_URL": "postgres://...", "FINANCIAL_PRODUCTS_TOKEN": "fpm_..." }
}
}
}Or run straight from GitHub: npx -y github:never2average/financial-products-mcp.
Shared server over HTTP (many users)
node dist/index.js serve-http --port 3000 --host 0.0.0.0Clients connect to http://host:3000/mcp (Streamable HTTP) with Authorization: Bearer fpm_.... Requests without a token are served as a guest, and invalid tokens get 401. Put it behind TLS (e.g. Caddy or nginx) before exposing it publicly.
claude mcp add --transport http financial-products https://your-host/mcp --header "Authorization: Bearer fpm_..."Deploying to a VM with self-hosted Supabase
deploy/setup-vm.sh sets up an Ubuntu VM end to end and is safe to re-run for updates:
# as root on the VM, with the domain's A record pointing at it
curl -fsSL https://raw.githubusercontent.com/never2average/financial-products-mcp/main/deploy/setup-vm.sh -o setup-vm.sh
bash setup-vm.sh mcp.example.com [git-ref]What it does:
Installs Docker and opens only SSH, 80 and 443 in
ufw.Runs Supabase's official Docker stack in
/opt/supabasewith freshly generated secrets. Studio, the API gateway and the pooler are bound to localhost; reach Studio withssh -L 8000:127.0.0.1:8000 root@<vm>.Creates a least-privilege Postgres role
financial_products_appthat owns only thefinancial_productsschema.Builds the MCP image and runs it with Caddy, which gets the TLS certificate automatically, serving
https://<domain>/mcp.
Create users on the VM:
docker compose -f /opt/financial-products-mcp/src/deploy/docker-compose.yml exec mcp \
node dist/index.js users add --name "Ines" --role innovatorSeeding your own catalog
Set FINANCIAL_PRODUCTS_FILE to a JSON array with the same fields as data/products.json. On every start, products whose id isn't in the database yet are inserted as published, read-only products.
Development
npm test # builds, then tests roles, the innovator workflow, ownership and HTTP auth on in-process Postgres (PGlite)
TEST_DATABASE_URL=postgres://postgres:pw@localhost:5432/postgres npm test # also runs the CLI/stdio test against a real PostgresDisclaimer
The bundled catalog describes product types for informational purposes. It contains no live rates and is not financial advice; rules (tax treatment, limits, lock-ins) change, so verify with the relevant regulator or provider. Enrollments here are records in this server's database, not real accounts.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Manage products, EU Digital Product Passports, operator parties, and GS1 EPCIS supply-chain events.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
OAuth-protected product catalog, ratings, reviews, categories and guides for approved agents.
CDR Explorer allows access to the Australian Consumer Data Right Product Data from Banks and Non-Bank Lenders. https://cdrexplorer.com.au/api/mcp for the anonymous endpoint.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables users to explore and manage banking card features including product discovery, comparison, eligibility checks, spend insights, merchant offers, travel notices, card controls, and digital wallet provisioning.MIT
- FlicenseNot gradedqualityAmaintenanceProvides read-only access to curated financial domain knowledge and product data with verified provenance, enabling users to search and retrieve trusted financial information.-
- AlicenseNot gradedqualityCmaintenanceEnables natural-language setup and management of a governed digital product catalog, including schema, products, and rules, with dry-run previews, audit logging, and two-phase confirmations for destructive actions.MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to browse a read-only catalog of published products and their documented interfaces, listing entries, fetching one by stable ID, and searching names, descriptions, and limitations with optional protocol filters. It also exposes the versioned manifest as a resource and a prompt that helps clients match a task to catalog entries without inventing unsupported capabilities.MIT