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
访问服务器

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)

Read — get_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

Analysis — forecast_client_cash (collection-rate based cash proposals)

Write — add/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.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选