Indexed FP&A MCP Server

Indexed FP&A MCP Server

Gives Claude full read/write access to the Indexed FP&A portal's data, enabling everything a person can do manually on the portal through conversation.

Category
Visit Server

README

Indexed FP&A — MCP Server

Gives Claude full read/write access to the Indexed FP&A portal's data — everything a person can do manually on the portal, through conversation.

How it works

The server runs the portal itself, headlessly. On every tool call it:

  1. Fetches the live forecast_data row from Supabase (same row the portal syncs).
  2. Loads the portal's index.html (from GitHub Pages, cached 5 min) and executes its <script> inside a sandboxed VM with a fake DOM, seeding the fake localStorage from the cloud row — exactly how a browser session hydrates.
  3. Calls the portal's own functions (getD, buildCFGroups, getFounderPayments, recalcARRow, parseXeroAccountTx, …) to compute answers or apply changes.
  4. For writes, PATCHes only the touched columns back to Supabase (ar_fcst, ap_fcst, ct_map, gl_mappings, cf_tx_overrides, cf_net_overrides, actuals_snap).

Because the portal's own code computes everything, the numbers Claude reports are always identical to what the portal shows — and when the portal's logic changes, the server picks it up automatically on the next HTML refresh. No drift, no re-implementation.

Tools (25)

Readget_dashboard_metrics, get_cf_statement, get_cf_groups, get_cf_transactions, get_bank_breakdown, get_financials, get_ar, get_ap, get_client_history, get_contacts, get_comments

Analysisforecast_client_cash (collection-rate based cash proposals)

Writeadd/update/delete_ar_rows, add/update/delete_ap_rows, set_contact_mapping, set_gl_mapping, manage_dashboard_rows, set_cf_override, import_xero_data, add_comment, resolve_comment

Run locally

npm install
npm start                      # port 3000
DRY_RUN=1 npm start            # writes are logged, not sent — safe testing
node test-client.js            # full test suite against localhost:3000

No env vars needed — Supabase config is extracted from the portal source. Comment tools additionally need SUPABASE_SERVICE_KEY (see .env.example).

Deploy (Railway — recommended)

Needs a full Node runtime (uses the vm module and fetch), so a container host works; edge platforms (Cloudflare Workers, Vercel Edge) do not.

npm i -g @railway/cli
cd indexed-fpa-mcp
railway login          # opens browser
railway init           # create a project
railway up             # build + deploy this folder (no GitHub needed)
railway domain         # generate a public HTTPS URL

Then set environment variables (Railway dashboard → Variables, or railway variables set):

Variable Required Purpose
MCP_AUTH_TOKEN yes for prod Comma-separated per-person tokens, each label:token — e.g. karan:abc123,anjan:def456. Any match authorizes; revoke one person by deleting their entry and redeploying.
SUPABASE_SERVICE_KEY for comment tools service_role key (Supabase → Settings → API).

Generate a token per person: node -e "console.log(require('crypto').randomBytes(24).toString('hex'))".

Verify: curl https://<app>.railway.app/health{"status":"ok",...}.

Access control — restricting to specific people

Two layers, together, mean only people you personally hand a token to can use it:

  1. Server token gate/mcp rejects any request without a valid token (401). Each person gets their own.
  2. Personal connector in Claude.ai — each authorized person adds the connector to their own account with their own token in the URL. It is never published to an org directory, so nobody else can discover or add it.

To revoke someone: remove their label:token entry from MCP_AUTH_TOKEN and redeploy. Everyone else is unaffected.

Connect to Claude.ai

Each person, in their own account: Settings → Connectors → Add custom connector. URL (their own token):

https://<app>.railway.app/mcp?token=<their-token>

(The server also accepts the token as an Authorization: Bearer header.)

Notes

  • GET /health hydrates a full portal session and reports the actual months — good smoke test.
  • The portal auto-pushes its entire state when a user edits there. If someone keeps a stale portal tab open for hours and then edits, their push can overwrite changes made through Claude in the meantime. Refreshing the portal (or "Pull latest") before editing avoids this — same rule as between two human users.
  • Xero imports through Claude: attach the Xero .xlsx in chat, Claude converts the sheet to raw rows and calls import_xero_data; the portal's own parser processes them.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured