bankmcp 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -6
- package/dist/lib/mcp.js +1 -1
- package/dist/lib/stdio.js +5 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +12 -4
- package/plugin/skills/deploy/SKILL.md +52 -0
- package/plugin/skills/setup/SKILL.md +53 -0
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
**Your AI now reads your bank.** Ask it anything about your accounts. Read-only, self-hosted, one user. Standard MCP; tested with Claude and Ollama.
|
|
4
4
|
|
|
5
5
|
BankMCP™ is not a bank. It is a small open-source server you host yourself
|
|
6
|
-
(package
|
|
6
|
+
(npm package `bankmcp`). It connects to your banks
|
|
7
7
|
through [Enable Banking](https://enablebanking.com), which wraps 2,700+
|
|
8
8
|
European banks in one PSD2 API, and exposes them to any MCP client as a
|
|
9
9
|
connector. Read-only, no payments, no third party holding your data.
|
|
@@ -24,8 +24,11 @@ Your assistant ──OAuth──▶ your BankMCP™ server ──JWT──▶ En
|
|
|
24
24
|
- **Your server** holds the Enable Banking application key, the bank consents
|
|
25
25
|
and your account ids. It does not store balances or transactions and sends no
|
|
26
26
|
telemetry.
|
|
27
|
-
- **Enable Banking** is the licensed provider
|
|
28
|
-
|
|
27
|
+
- **Enable Banking** is the licensed provider between your server and your
|
|
28
|
+
bank. Every balance and transaction you ask for passes through their
|
|
29
|
+
servers on the way to yours; they do not store it, and they do not see your
|
|
30
|
+
bank credentials, since you log in at your bank's own site. This hop is how
|
|
31
|
+
PSD2 works and is the one part of the chain that is not on your machine.
|
|
29
32
|
|
|
30
33
|
## Setup
|
|
31
34
|
|
|
@@ -38,6 +41,10 @@ minutes.
|
|
|
38
41
|
|
|
39
42
|
### On your own machine
|
|
40
43
|
|
|
44
|
+
The server and its state live on your computer, and no AI vendor or app
|
|
45
|
+
maker sees your data. The bank connection is not on your computer: it goes
|
|
46
|
+
through Enable Banking, as described above.
|
|
47
|
+
|
|
41
48
|
Requires [Node 24](https://nodejs.org) or newer. Add BankMCP™ to your client:
|
|
42
49
|
|
|
43
50
|
Claude Code:
|
|
@@ -194,9 +201,10 @@ is polled. There is no way around that under PSD2.
|
|
|
194
201
|
## Claude Code plugin
|
|
195
202
|
|
|
196
203
|
The repository is also a Claude Code plugin marketplace. The `bank` plugin
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
204
|
+
brings three skills: `/bank:setup` walks you through installing BankMCP™ on
|
|
205
|
+
your machine, `/bank:deploy` through hosting it, and `bank` encodes how to work
|
|
206
|
+
with the data: an account map, categorisation rules, the monthly review format
|
|
207
|
+
and when to create watches.
|
|
200
208
|
|
|
201
209
|
Point it at your server, then install:
|
|
202
210
|
|
package/dist/lib/mcp.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { registerTools } from "./tools.js";
|
|
3
3
|
import { registerPrompts } from "./prompts.js";
|
|
4
|
-
export const VERSION = "0.1.
|
|
4
|
+
export const VERSION = "0.1.2";
|
|
5
5
|
export function createServer() {
|
|
6
6
|
const server = new McpServer({ name: "bank", version: VERSION }, {
|
|
7
7
|
instructions: [
|
package/dist/lib/stdio.js
CHANGED
|
@@ -11,5 +11,9 @@ const { ensureLocalServer } = await import("./local.js");
|
|
|
11
11
|
ensureLocalServer().catch((err) => console.error("[bank] could not start the local server:", err.message));
|
|
12
12
|
if (!isConfigured())
|
|
13
13
|
console.error("[bank] not configured yet: ask your assistant anything and it will point you to the setup page");
|
|
14
|
-
|
|
14
|
+
const transport = new StdioServerTransport();
|
|
15
|
+
// Exit with the client: when stdin closes, the localhost listener must not keep the process alive.
|
|
16
|
+
transport.onclose = () => process.exit(0);
|
|
17
|
+
process.stdin.on("end", () => process.exit(0));
|
|
18
|
+
await createServer().connect(transport);
|
|
15
19
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bankmcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "BankMCP™: self-hosted, read-only MCP server that lets any AI assistant (Claude, ChatGPT, Mistral, Cursor, or a local model) answer questions about your own bank accounts via open banking (Enable Banking, PSD2)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bank",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "BankMCP™: work with your own bank accounts through
|
|
5
|
-
"author": {
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "BankMCP™: work with your own bank accounts through a bankmcp server (Enable Banking, open banking) connector: account mapping, categorisation rules and the monthly review format.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Nils Smed"
|
|
7
|
+
},
|
|
6
8
|
"homepage": "https://github.com/noskillish/bankmcp",
|
|
7
9
|
"license": "MIT",
|
|
8
|
-
"keywords": [
|
|
10
|
+
"keywords": [
|
|
11
|
+
"banking",
|
|
12
|
+
"personal-finance",
|
|
13
|
+
"psd2",
|
|
14
|
+
"enable-banking",
|
|
15
|
+
"mcp"
|
|
16
|
+
]
|
|
9
17
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deploy
|
|
3
|
+
description: Deploy BankMCP™ to a small server so it works in claude.ai and on the phone: Railway or Fly.io, volume, domain, setup page, connector. Use when the user says "deploy bankmcp", "host it", "/deploy", "use it on my phone", or "add it to claude.ai".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Deploy BankMCP™ to a server
|
|
7
|
+
|
|
8
|
+
Guide one person through a hosted deployment. Prefer Railway unless the user names another host. Run what you can with the CLI; the user does the dashboard clicks, their bank login and their claude.ai settings.
|
|
9
|
+
|
|
10
|
+
## 1. Choose the host
|
|
11
|
+
|
|
12
|
+
Ask which they have: Railway, Fly.io, or their own box with Docker. If none, recommend Railway (https://railway.com) and wait until they have an account.
|
|
13
|
+
|
|
14
|
+
## 2. Railway
|
|
15
|
+
|
|
16
|
+
If the `railway` CLI is installed and logged in (`railway whoami`), do it from the terminal:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
railway init
|
|
20
|
+
railway add --service bankmcp --repo noskillish/bankmcp --branch main
|
|
21
|
+
railway volume add -m /data
|
|
22
|
+
railway domain --port 8080
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Otherwise, in the Railway dashboard: New Project, Deploy from GitHub repo `noskillish/bankmcp`; add a Volume mounted at `/data`; Settings, Networking, Generate Domain on port 8080.
|
|
26
|
+
|
|
27
|
+
Report the public address. No variables are needed; the server detects its own address on Railway.
|
|
28
|
+
|
|
29
|
+
## 3. Fly.io or Docker
|
|
30
|
+
|
|
31
|
+
Fly: `fly launch --no-deploy` from a clone of the repo, `fly volumes create data --size 1`, add a `[mounts]` entry for `/data`, `fly deploy`. Docker: `docker compose up -d` from a clone, then a TLS proxy in front and `BASE_URL` set to the public https address.
|
|
32
|
+
|
|
33
|
+
## 4. Setup page
|
|
34
|
+
|
|
35
|
+
Tell the user to open the public address. It shows a setup page with the values for Enable Banking's form. Walk them through registering the application as in the `setup` skill (environment, redirect URL, description, privacy and terms URLs, key download), then entering the application id, the `.pem` file and a password of twelve characters or more. The status page then shows the connector URL.
|
|
36
|
+
|
|
37
|
+
## 5. Connector
|
|
38
|
+
|
|
39
|
+
claude.ai (personal Pro or Max account): Settings, Connectors, Add custom connector, name `BankMCP™`, URL `https://<address>/mcp`, leave OAuth fields empty, Add, Connect, enter the password.
|
|
40
|
+
|
|
41
|
+
Team or Enterprise workspaces only allow Owners to add custom connectors; say so if the button is missing.
|
|
42
|
+
|
|
43
|
+
Claude Code: `claude mcp add --transport http bankmcp https://<address>/mcp`, then `/mcp` to sign in.
|
|
44
|
+
|
|
45
|
+
## 6. Bank
|
|
46
|
+
|
|
47
|
+
In the connected client: "connect my bank". Same flow as locally; the redirect returns to the server's `/callback`.
|
|
48
|
+
|
|
49
|
+
## Notes
|
|
50
|
+
|
|
51
|
+
- Changing the password later logs every client out; that is the kill switch.
|
|
52
|
+
- Set `NOTIFY_WEBHOOK_URL` to a Slack incoming webhook for sign-in alerts and watch notifications.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup
|
|
3
|
+
description: Set up BankMCP™ on this machine step by step: check Node, register the local MCP server, walk through the Enable Banking application, finish the setup page and connect the first bank. Use when the user says "set up bankmcp", "install bankmcp", "/setup", "connect my bank for the first time", or has BankMCP tools that report "not set up yet".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Set up BankMCP™ locally
|
|
7
|
+
|
|
8
|
+
You are guiding one person through running BankMCP™ on their own machine. Do the steps in order, one at a time, and confirm each before the next. Run commands yourself where you can; ask the user to do the parts that need their browser or their bank login. Do not guess values; read them from command output.
|
|
9
|
+
|
|
10
|
+
## 1. Node
|
|
11
|
+
|
|
12
|
+
Run `node --version`. BankMCP needs 24 or newer. If it is older or missing, tell the user to install the current LTS from https://nodejs.org and stop until it is done.
|
|
13
|
+
|
|
14
|
+
## 2. Register the server with Claude Code
|
|
15
|
+
|
|
16
|
+
Run:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
claude mcp add --scope user bankmcp -- npx -y bankmcp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Then tell the user to restart Claude Code (or run `/mcp`) so the `bankmcp` tools appear. Wait for them to confirm the tools are listed.
|
|
23
|
+
|
|
24
|
+
## 3. Find the setup page
|
|
25
|
+
|
|
26
|
+
Call any BankMCP tool, for example `list_accounts`. On a fresh install it answers with a localhost address such as `https://localhost:8080`. Give the user that exact address and tell them:
|
|
27
|
+
|
|
28
|
+
- their browser will warn about a self-signed certificate on localhost; they should continue past it, it is the server they just started;
|
|
29
|
+
- the page lists four values for Enable Banking's form, each with a Copy button.
|
|
30
|
+
|
|
31
|
+
## 4. Enable Banking application
|
|
32
|
+
|
|
33
|
+
Tell the user to open https://enablebanking.com/cp/applications in another tab, create an account if needed, and add an application:
|
|
34
|
+
|
|
35
|
+
- Environment: **Production** for real accounts, **Sandbox** to try with test data.
|
|
36
|
+
- Paste the redirect URL, description, privacy URL and terms URL from the setup page.
|
|
37
|
+
- Keep "generate private key" selected. On Save a `.pem` file downloads once; the application id (a UUID) is shown after saving.
|
|
38
|
+
|
|
39
|
+
For Production, mention that the application starts Inactive and that clicking **Activate by linking accounts** and logging in at their bank is what activates it for their own accounts.
|
|
40
|
+
|
|
41
|
+
## 5. Finish the setup page
|
|
42
|
+
|
|
43
|
+
Back on the localhost page: paste the application id, choose the downloaded `.pem`, set the country, click Finish setup. The page turns into a status page. Confirm with the user.
|
|
44
|
+
|
|
45
|
+
## 6. Connect the first bank
|
|
46
|
+
|
|
47
|
+
Call `list_banks` with the user's country and let them pick. Call `start_consent` with the exact bank name and give them the URL. They log in at the bank and land on a "Bank connected" page. Then call `list_accounts` and show what got linked. Offer labels with `set_account_label`.
|
|
48
|
+
|
|
49
|
+
## If something fails
|
|
50
|
+
|
|
51
|
+
- Tool says "not set up yet" after setup: the server may need a restart; run `/mcp` and reconnect `bankmcp`.
|
|
52
|
+
- "redirect_uri" errors from Enable Banking: the redirect URL on the application must be exactly the one the setup page showed, including `https://` and the port.
|
|
53
|
+
- Port in use: set `PORT` for the server (for example `claude mcp add --scope user -e PORT=8085 bankmcp -- npx -y bankmcp`) and register the matching redirect URL.
|