原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Rail

作者:tstockham96版本 0.1.1i★ 0i在你的电脑上运行
注册名称io.github.tstockham96/rail-mcp

安装

概览

作者提供的说明(英文原文)

Budgets, propose-then-approve, and receipts for agents that buy for a human. Dry-run by default.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

你需要

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "rail": {
      "command": "npx",
      "args": [
        "-y",
        "rail-mcp"
      ],
      "env": {
        "RAIL_DATA_DIR": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add rail --env RAIL_DATA_DIR=your-value -- npx -y rail-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "rail": {
      "command": "npx",
      "args": [
        "-y",
        "rail-mcp"
      ],
      "env": {
        "RAIL_DATA_DIR": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "rail": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "rail-mcp"
      ],
      "env": {
        "RAIL_DATA_DIR": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • RAIL_DATA_DIR env
    Directory for the local ledger (budget, proposals, receipts). Defaults to ~/.rail in the user home directory. Set to override.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

哪些应用可以使用它

依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。

在你的电脑上运行,适用于

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

全部应用及其优缺点 →

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月11日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 tstockham96 验证,该账户拥有此仓库

  • ✓ 通过

    仍在维护

    代码最后更新于43天前

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 19116 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 19116 个服务器的 51% 更新
  • 基础检查结果等于或优于此分类中其他 19116 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Rail 安全吗?

它在 2 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于43天前,最新版本(0.1.1)于43天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:World Monitor, Claude Flow, Tldraw

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

World Monitor

Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.

作者:koala73广泛使用★ 9万6天前更新

在云端运行✓ worldmonitor.app

Claude Flow

AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.

作者:ruvnet广泛使用↓ 1.4万/周★ 8.1万14个月前更新

在你的电脑上运行

Tldraw

Draw and visually collaborate with your agents on tldraw's canvas.

作者:tldraw广泛使用★ 5.1万8个月前更新

在云端运行

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

Rail MCP

Rail is a budget, approval and receipt layer that agents call when they buy something on a human's behalf, dry-run by default, wrapping Stripe Link for settlement rather than issuing cards.

It is not a marketplace, storefront, or outreach tool. Rail owns the budget, the approval gate, and the receipt ledger.

Quickstart

Requires Node.js 20+. Run the published package with npx -y rail-mcp. Default mode is dry-run: no network and no charges.

Claude Desktop and any other host that takes an mcpServers block:

{

"mcpServers": { "rail": { "command": "npx", "args": ["-y", "rail-mcp"] } } }

Cursor: one-click install (install links). The config value is the base64 of {"command":"npx","args":["-y","rail-mcp"]}.

Install Rail in Cursor

cursor://anysphere.cursor-deeplink/mcp/install?name=rail&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInJhaWwtbWNwIl19

Grok Bot: add a custom MCP with npx -y rail-mcp.

Do not put Stripe or Link secrets (STRIPE_SECRET_KEY, LINK_ACCESS_TOKEN, or live-spend flags) in this shared snippet. Real charges stay off unless those gates are set on purpose, outside the shared config. See Stripe Link seam.

Ledger files (budget.json, proposals.json, receipts.json) are written to ~/.rail in the user home directory, or to RAIL_DATA_DIR when that is set. They are local state, not part of the npm package. The default does not follow the process working directory, so a host that starts the server from / still writes under the home directory.

Example

Set a budget, propose a purchase, have a human approve it, then read the receipt. Dry-run moves no money off the machine.

  1. set_budget → { "amount_usd": 50, "note": "week1" }
  2. propose_purchase → { "merchant": "Acme", "amount_usd": 12, "rationale": "need widgets" }
  3. get_budget still shows remaining 50.00 and open_proposals: 1. The proposal is pending until a human decides.
  4. decide_proposal → { "proposal_id": "prop_…", "decision": "approve" }
  5. get_receipts returns one settled_dry_run receipt with a settlement_ref. Remaining budget is 38.00.

Rejecting spends nothing. refund_receipt reverses a dry-run settlement and restores the budget.

Tools

ToolPurpose
set_budgetOverwrite the local budget limit. Moves no money
get_budgetRead budget, spent, remaining, open proposals count
propose_purchaseRecord a pending intent only. Moves no money. Needs a later human approval
list_proposalsRead proposals by pending (default) / approved / rejected / all
decide_proposalHuman confirmation step. approve settles (dry-run receipt + settlement_ref, remaining decremented). reject spends nothing. No double-decide
get_receiptsRead receipts, newest first
refund_receiptHuman confirmation step. Reverse a dry-run settlement and restore budget

Permission model

Proposing a purchase is cheap. Settling one is not. An agent may record intent without moving money. The human should confirm the call that settles a purchase or reverses a receipt.

Hosts should read title, description, and annotations from tools/list. Every hint is set explicitly. The spec defaults (readOnlyHint false, destructiveHint true, openWorldHint true) would otherwise treat every tool as a destructive open-world write. Rail's ledger is local. Default mode is dry-run: no network and no charge.

ToolreadOnlyHintdestructiveHintidempotentHintopenWorldHintHost should
set_budgetfalsefalsetruefalseAllow. Overwrites the local limit only. The same arguments do not stack or spend
get_budgettruefalsetruefalseAllow. Read-only
propose_purchasefalsefalsefalsefalseAllow. Adds one pending intent and spends nothing. Each call creates a new proposal
list_proposalstruefalsetruefalseAllow. Read-only
decide_proposalfalsetruetruefalseConfirm with the human. approve settles and decrements remaining budget. A repeat does not settle again
get_receiptstruefalsetruefalseAllow. Read-only
refund_receiptfalsetruetruefalseConfirm with the human. Reverses a dry-run settlement and restores budget. A repeat does not refund again

destructiveHint is the confirmation signal, and it is true only for decide_proposal and refund_receipt. openWorldHint is false on every tool: dry-run never leaves the ledger, and live Link stays behind separate environment gates. Annotations are hints for the host. They do not themselves move money.

Mode defaults to RAIL_MODE=dry_run. Money is stored as integer cents; tools display USD with 2 decimals. IDs: prop_…, rcpt_…, dry-run Link refs lsrq_dry_… on settlement_ref.

Local checkout

tsx is a dev dependency for dogfood in this repo. npm run smoke runs the TypeScript sources directly and does not need a build. npm start compiles first, then runs dist/index.js (the same file the rail-mcp bin points at).

npm install

npm start # tsc → dist/, then stdio MCP server npm run dev # tsx watch src/index.ts npm run smoke # dry-run ledger smoke test; throwaway dirs only (never ./data, ~/.rail, or RAIL_DATA_DIR)

npm run smoke forces RAIL_MODE=dry_run, never enables live charge gates, and writes the ledger only under temporary directories it creates and deletes. ./data, ~/.rail, and RAIL_DATA_DIR are left untouched even when RAIL_DATA_DIR is set in the environment. One check starts the server with its working directory at / and HOME pointed at a temp directory, then calls a tool. That call succeeds, and the ledger for that check is created under the temp home rather than /data or the real ~/.rail. An explicit RAIL_DATA_DIR still overrides the default in that launch.

Stripe Link seam

Rail asks Link for a one-time credential. Rail still decides budget and policy and writes the receipt. This seam does not issue cards and does not render UI.

  • `RAIL_MODE=dry_run` (default, including when unset): createSpendRequest returns a fake Link spend-request id and status dry_run_pending_human. No Stripe or Link HTTP. Approve stores that id as settlement_ref on a settled_dry_run receipt and decrements remaining budget.
  • `RAIL_MODE=live` without gates: throws live mode not enabled — set keys and get explicit human approval unless both STRIPE_SECRET_KEY and RAIL_LIVE=1 are set. The proposal stays pending and no receipt is written.
  • Live with those two gates: the POST https://api.link.com/spend_requests body is scaffolded only (see src/stripeLink.ts). Nothing is sent unless RAIL_ALLOW_LIVE_CHARGE=1.
  • `RAIL_ALLOW_LIVE_CHARGE=1`: the only branch allowed to call Link, and only if LINK_ACCESS_TOKEN is also set. STRIPE_SECRET_KEY is a presence gate and is never sent. There is no Stripe Issuing card create. Docs: Link CLI, link-cli, Issuing for agents.
  • Live spend stays off until those env vars are set on purpose. A posted Link request is stored as link_pending_human and does not decrement the dry-run budget. CI and npm run smoke stay on dry-run and do not charge.
EnvRole
RAIL_MODEdry_run (default) or live
RAIL_DATA_DIRLedger directory. Default is ~/.rail in the user home directory. An explicit value overrides the default
STRIPE_SECRET_KEYRequired for live. Not used to issue cards or as a Link bearer token
RAIL_LIVE=1Explicit live approval alongside the secret key
RAIL_ALLOW_LIVE_CHARGE=1Additional gate before any Link HTTP
LINK_ACCESS_TOKENLink OAuth token. Required before the scaffolded POST actually runs

Explicit non-goals

  • No marketplace UI
  • No outreach / messaging
  • No card issuing
  • No real charges in dry-run, CI, or smoke

License

MIT. Copyright 2026 Thomas Stockham.