{"_id":"bankmcp","_rev":"9-47f7e2d97584db04e8785df0e40c76ce","name":"bankmcp","dist-tags":{"latest":"0.1.14"},"versions":{"0.1.0":{"name":"bankmcp","version":"0.1.0","license":"MIT","_id":"bankmcp@0.1.0","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"f50fe2f631fb0c1d99cf33185ee7d4acd04c6f24","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.0.tgz","fileCount":23,"integrity":"sha512-hgBSYW8KPcxmwxnpkgNqxxukTS+cwq5hO0I9x9i/uXVeCbt/u0ndY+NbzvgNcaWqnCcCKSI+ttgf2ryEY9ovUw==","signatures":[{"sig":"MEUCIFWEy33oJtvJ4hITkDNp4GHnaj98VNd9/uPZC9UZ47IXAiEA/ByNf/YnkAOWzg9ZH074B9D4/l8731AHEssORrRR6K8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121920},"type":"module","engines":{"node":">=24"},"gitHead":"7d24a124e173d379ea049845c66a248943588693","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","test":"node --test test/*.test.ts","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.0_1788847627449_0.1500232996645774","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"bankmcp","version":"0.1.1","license":"MIT","_id":"bankmcp@0.1.1","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"6dd155e91e78c2f44ca763644165be9fae9299e6","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.1.tgz","fileCount":23,"integrity":"sha512-87Im2Dt/Emc1U8aV7/VtZTfVieJFJA0INQVJM8hoRDipwlN/AbfOsrpKV3Gs6ySHd8E+iKQCW0UbYCXeDvd56A==","signatures":[{"sig":"MEUCIQD/XRsJCMbeuV2gZ0niV60EB8WX9DxPBGMR6h5a/0w1lQIgTar97g3V3hrCLOr1O5C7jvmu8kSdmCLd9X388ki7WM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE5RHORZdtcMSgfA8W3BmNNLBIGl/+Rabhig0UfNGlL7AiEA7mmXUHn1EOZ5f2E9NXMFVI42RUTl4hGkZDVZ0TgaJsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115444},"type":"module","engines":{"node":">=24"},"gitHead":"772f987eac54db7ab8fee6ba5eb72d68604b9910","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","test":"node --test test/*.test.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.1_1788851067144_0.5859110722674077","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"bankmcp","version":"0.1.2","license":"MIT","_id":"bankmcp@0.1.2","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"69d0d5f11279aec32c03dc7d72514173dd568235","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.2.tgz","fileCount":25,"integrity":"sha512-ftviBuFEizrZeLVoZ9VtZ+t0it++Ke5TGBwfpjGU5NuNEH/Zz0zcrclfzOpPhp5O+UTBjy2ZAyDysw3jOT0VHA==","signatures":[{"sig":"MEUCIQDOyrUyITYLFig09jx/zid7tKsE8T4pTAWCsAJlLvKLZAIgLa6yN5EPwqnTSsowZXOCEwaaNYP62kD+RPIvgztChb4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD9X/KcKLwczLTWzHeBrttDQezcLeg22ZoFK3NHgeVzjAIhALWqfbBYSPYxn95lAJMv06IN2Y94dDPkpEAvVtbdYJYk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":122130},"type":"module","engines":{"node":">=24"},"gitHead":"bf131bf0859983fbcb38493da060148d1edcbdf1","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","test":"node --test test/*.test.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.2_1788877417899_0.9360642032718529","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"bankmcp","version":"0.1.3","license":"MIT","_id":"bankmcp@0.1.3","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"7226c5b009800300b6bed5c7c4f7a7bdc015fe7f","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.3.tgz","fileCount":25,"integrity":"sha512-b/81nKccziqgRNLZFoXV3MCZ3FdoRHzbZP5Izko7eTAIIH+xo5spCwjpLd/2WVRWoefTZ3vVn9AlRm2+n7C41Q==","signatures":[{"sig":"MEYCIQDs6sD27tMfhOqYG9MWn0vsgcwubIHr9dv7RluG4HSV0wIhAJGnQ3/+mYwblKKdSsm6+H6SKSiPIwhUNv8tr3SMNjDj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCdf7pisbBtFiGH0x1Xpc2AOFPfL8Oqs9RzKzp4BJlT+wIgCUtIwi/7YuTx2ONdZBmLAunBHolHWN0tstkbvUP0I7w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125437},"type":"module","engines":{"node":">=24"},"gitHead":"6eb82507e20af47f7ed0374a79a9882a1c6eb6f1","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","test":"node --test test/*.test.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.3_1788884134501_0.6980677930392882","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"bankmcp","version":"0.1.4","license":"MIT","_id":"bankmcp@0.1.4","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"9c1f29b93b0157f5120c2b465908c6b266609ec7","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.4.tgz","fileCount":25,"integrity":"sha512-ymcLgiYP1W5913tBSgIPcnZC8b3bvfbgrAgtPJjaush0xTSSWlT2pykaD6deziEnu302myRBMvTWS7vABN8whA==","signatures":[{"sig":"MEUCIGY/5l48UJH6MMqJhHHx1JugMKsUOHI5HzrRTynwMusNAiEA6kkCBkIX1KJuImJsM0TfDCdwqgy4NwLdyBYiW+VdUWY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCIvcXWHul4UbGXzLnflDBRg5JIpgJdNhJ/SHPO2o4ssgIgfpdM5hZyGltQaJTLOXWjk6YNcqVYNrAm9tgwq/L/6cI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127986},"type":"module","engines":{"node":">=24"},"gitHead":"0312f7d8a5bf25f6118fd87007ed80aad229343d","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","test":"node --test test/*.test.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.4_1788889940313_0.04058464738208967","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"bankmcp","version":"0.1.5","license":"MIT","_id":"bankmcp@0.1.5","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"37d1ec1a450a4a56b229013de85934b5d714999f","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.5.tgz","fileCount":25,"integrity":"sha512-Y2iG185aJJ4NJKZPZ+KsqgOegwWULNwT39rxZNeTL6ypglVk7kzy+wuz9cL8zX7gtqRyiTikskc7lxN9y2e1Sg==","signatures":[{"sig":"MEUCIGCiZMw8TewXO/ZJznFazRKqyQbZpY3YeyawG5Zois0dAiEAvX5DUd0fz8O/49ohXfj2RY4SrLFJBy36S22dhwNJH4s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDcHEbsBEOHkKSOZ2NsEYwQBlpkH3Yv8hNKBSROXAz9kAiAGQVuuNv/CmemwGJUy4rXDc7TT56vHr7oX1eB9CrgcRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129464},"type":"module","engines":{"node":">=24"},"gitHead":"2bef3f4d2b2902ff22ca65be12e9680ef16e146d","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","test":"node --test test/*.test.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.5_1789375947265_0.621010145234884","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"bankmcp","version":"0.1.6","keywords":["mcp","mcp-server","model-context-protocol","banking","open-banking","psd2","enable-banking","personal-finance","claude","chatgpt","self-hosted"],"license":"MIT","_id":"bankmcp@0.1.6","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"homepage":"https://bankmcp.dk/","bugs":{"url":"https://github.com/noskillish/bankmcp/issues"},"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"9224669db640d2f00e0d9f3774303e243185bd9d","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.6.tgz","fileCount":25,"integrity":"sha512-Kus2sI36aVRQqm+6dScju2K/dHSWJ2ye54tXLvnkfkNJ3dm/gzsaMeKcCJuAYnDjFES1X3gGk3e2MWTCzzG6TQ==","signatures":[{"sig":"MEQCIEvt3CBAn90zG/IoiTSsb/5E8VACBsCrQzAUoKeFfe0JAiA2mAgxE8ChSBT3ffNMzXtgF/fAxcVTlYeOf9d4lAPfEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD98+Vo0R6B3OM5g3B/s203PB4DiT+HLqIaR3+4oJS5VgIgJoR5m18jgoeftqZhmIMTAerXobsX5HkhzFq8JcrI+IU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131105},"type":"module","engines":{"node":">=24"},"gitHead":"8882ff3608d04753f1f82efb2c682e586ec43c48","mcpName":"io.github.noskillish/bankmcp","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","site":"node scripts/site.ts","test":"node --test test/*.test.ts","banks":"node --env-file=.env scripts/banks.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"repository":{"url":"git+https://github.com/noskillish/bankmcp.git","type":"git"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.6_1789384275325_0.6746668050524183","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"bankmcp","version":"0.1.13","keywords":["mcp","mcp-server","model-context-protocol","banking","open-banking","psd2","enable-banking","personal-finance","claude","chatgpt","self-hosted"],"license":"MIT","_id":"bankmcp@0.1.13","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"homepage":"https://bankmcp.dk/","bugs":{"url":"https://github.com/noskillish/bankmcp/issues"},"bin":{"bankmcp":"bin/bankmcp.js"},"dist":{"shasum":"546ca7ea194d9c1b4fceb0bcaaa513d82a63c30a","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.13.tgz","fileCount":27,"integrity":"sha512-4BxenFQepjfE8PFnltcI8k05w2Jq1Laslo8BDvPP3J6dfxHiV1cG/bVBQUbCD5Sjs0wElafVPNZcaI1IfRh7ug==","signatures":[{"sig":"MEUCIQCNKRwthmWfnSHQLd8qXfmvhTfykoORpemnrXZW1geLNQIgWK+9aiJuHmbThYieyedUVGn46WfXuR8/SEL5hXkiVEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDORX3YRbWPJXOMhlNkYz9ivy6lp3wpfPu3AteqnqC8hAiEAstjh6tWAgP0JEIY99hldk8cr5Hm8PkoiptN9dR7Iep8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172553},"type":"module","engines":{"node":">=24"},"gitHead":"8ddf8346686fb575856a0e539411a825590b19f6","mcpName":"io.github.noskillish/bankmcp","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","site":"node scripts/site.ts","test":"node --test test/*.test.ts","banks":"node --env-file=.env scripts/banks.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"repository":{"url":"git+https://github.com/noskillish/bankmcp.git","type":"git"},"_npmVersion":"11.16.0","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)","directories":{},"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/bankmcp_0.1.13_1789414250424_0.7815699342014051","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"_id":"bankmcp@0.1.14","bin":{"bankmcp":"bin/bankmcp.js"},"bugs":{"url":"https://github.com/noskillish/bankmcp/issues"},"dist":{"shasum":"1f1592065f15b3790fc3527415010e76f0c482c0","tarball":"https://registry.npmjs.org/bankmcp/-/bankmcp-0.1.14.tgz","fileCount":27,"integrity":"sha512-YtaffOfNXMehs7fLuereLc9Mt03cBH48g5hoUh4JBkmpgAO8J+V8OHPDt/3l5rGjVObpaf5X25bxVIwocv6V3g==","signatures":[{"sig":"MEYCIQDtug4//WvU7AkyYsfTIq0kpnQ7rUTlhn07tuVjalww/AIhANGLPqfwkgdLnjy5J9cA50yy+yTzcT1osbLxvRJN9+wG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCkP80n3KaQoqoX+l1ZPW0bdfFiVeHAAknLdIuV9qGJzQIgKknGCgbsoZ5OBR5R9Ijnho1EFVny4tAcxJE815iXvb4="}],"unpackedSize":173603},"name":"bankmcp","type":"module","engines":{"node":">=24"},"gitHead":"6bea5575a1201ce275cf28669b32daddcbf1a1f9","license":"MIT","mcpName":"io.github.noskillish/bankmcp","scripts":{"dev":"node --watch --env-file=.env src/server.ts","chat":"node --env-file-if-exists=.env scripts/local-chat.ts","site":"node scripts/site.ts","test":"node --test test/*.test.ts","banks":"node --env-file=.env scripts/banks.ts","build":"rm -rf dist/lib && tsc -p tsconfig.build.json","check":"node --env-file-if-exists=.env src/cli.ts check","local":"node bin/bankmcp.js","start":"node src/server.ts","stdio":"node --env-file=.env src/stdio.ts","watch":"node --env-file-if-exists=.env src/cli.ts watch","typecheck":"tsc --noEmit","hash-password":"node src/cli.ts hash-password","prepublishOnly":"npm run build && npm test"},"version":"0.1.14","_npmUser":{"name":"noskillish","email":"nils.o.smed@gmail.com"},"homepage":"https://bankmcp.dk/","keywords":["mcp","mcp-server","model-context-protocol","banking","open-banking","psd2","enable-banking","personal-finance","claude","chatgpt","self-hosted"],"repository":{"url":"git+https://github.com/noskillish/bankmcp.git","type":"git"},"_npmVersion":"11.16.0","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)","directories":{},"maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"_nodeVersion":"26.3.1","dependencies":{"zod":"^4.5.4","express":"^5.2.1","selfsigned":"^5.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.0","@types/node":"^24.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bankmcp_0.1.14_1789567583594_0.8292528203157017"}}},"time":{"created":"2026-09-08T06:07:07.209Z","modified":"2026-09-16T14:06:23.826Z","0.1.0":"2026-09-08T06:07:07.591Z","0.1.1":"2026-09-08T07:04:27.238Z","0.1.2":"2026-09-08T14:23:37.999Z","0.1.3":"2026-09-08T16:15:34.584Z","0.1.4":"2026-09-08T17:52:20.394Z","0.1.5":"2026-09-14T08:52:27.346Z","0.1.6":"2026-09-14T11:11:15.413Z","0.1.13":"2026-09-14T19:30:50.534Z","0.1.14":"2026-09-16T14:06:23.684Z"},"bugs":{"url":"https://github.com/noskillish/bankmcp/issues"},"license":"MIT","homepage":"https://bankmcp.dk/","keywords":["mcp","mcp-server","model-context-protocol","banking","open-banking","psd2","enable-banking","personal-finance","claude","chatgpt","self-hosted"],"repository":{"url":"git+https://github.com/noskillish/bankmcp.git","type":"git"},"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)","maintainers":[{"name":"noskillish","email":"nils.o.smed@gmail.com"}],"readme":"# BankMCP™\n\n**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.\n\nBankMCP™ is not a bank. It is a small open-source server you host yourself\n(npm package `bankmcp`). It connects to your banks\nthrough [Enable Banking](https://enablebanking.com), which wraps 2,700+\nEuropean banks in one PSD2 API, and exposes them to any MCP client as a\nconnector. Read-only, no payments, no third party holding your data.\n\n> \"Has the invoice from Acme been paid?\" · \"What did we spend on groceries in\n> August?\" · \"Which subscriptions am I paying for, and what do they cost per\n> year?\" · \"Tell me when my balance drops below 5,000.\"\n\n## How it works\n\n```\nYour assistant ──OAuth──▶ your BankMCP™ server ──JWT──▶ Enable Banking ──PSD2──▶ your bank\n```\n\n- **Your assistant** (Claude, ChatGPT, Cursor, or any MCP client) talks to\n  your server as a connector. You sign in once with a password; tokens handle\n  the rest.\n- **Your server** holds the Enable Banking application key, the bank consents\n  and your account ids. It does not store balances or transactions and sends no\n  telemetry.\n- **Enable Banking** is the licensed provider between your server and your\n  bank. Every balance and transaction you ask for passes through their\n  servers on the way to yours; they do not store it, and they do not see your\n  bank credentials, since you log in at your bank's own site. This hop is how\n  PSD2 works and is the one part of the chain that is not on your machine.\n\n## Setup\n\nTwo ways to run it. Both need a free Enable Banking account and about ten\nminutes.\n\n- **On your own machine** for Claude Desktop, Claude Code, Cursor and other\n  desktop MCP clients. Nothing to deploy, no password.\n- **On a small server** when you want it in claude.ai or on your phone.\n\n### On your own machine\n\nThe server and its state live on your computer, and no AI vendor or app\nmaker sees your data. The bank connection is not on your computer: it goes\nthrough Enable Banking, as described above.\n\nRequires [Node 24](https://nodejs.org) or newer. Add BankMCP™ to your client:\n\nClaude Code:\n\n```bash\nclaude mcp add bankmcp -- npx -y bankmcp\n```\n\nClaude Desktop: download\n[bankmcp.mcpb](https://github.com/noskillish/bankmcp/releases/latest/download/bankmcp.mcpb)\nand open it; Claude Desktop installs it as an extension. Or add it by hand in\n`claude_desktop_config.json`:\n\n```json\n{ \"mcpServers\": { \"bankmcp\": { \"command\": \"npx\", \"args\": [\"-y\", \"bankmcp\"] } } }\n```\n\nCursor and others: the same command, `npx -y bankmcp`, as a stdio server.\n\nThen ask your assistant anything about your bank. It will answer with a\nlocalhost address. Open it: the setup page lists the values to register an\napplication at Enable Banking, then takes the application id and the key file.\nYour browser will warn once about the certificate on localhost, which the\nserver made for itself because Enable Banking requires https for the bank\nredirect. Continue past it. Say \"connect my bank\" and log in at your bank.\n\nTo avoid the warning altogether, use a certificate your browser already\ntrusts: [mkcert](https://github.com/FiloSottile/mkcert) makes one with\n`mkcert localhost 127.0.0.1`; point `TLS_CERT_PATH` and `TLS_KEY_PATH` at the\ntwo files and the server uses them instead of generating its own. BankMCP™\nitself does not touch your system's trust store.\n\nState lives in `~/.bankmcp`. Delete the folder to forget everything.\n\n### On a server\n\n#### 1. Deploy\n\nAny container host works. The server needs a persistent volume at `/data`\nand a public https address; it asks you for everything else in the browser.\nA prebuilt image is published on every release:\n`ghcr.io/noskillish/bankmcp` (built by [GitHub Actions](.github/workflows/image.yml)\nfrom the tagged source, `linux/amd64` and `linux/arm64`).\n\n**Railway:** [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/new/template/bankmcp?utm_medium=integration&utm_source=button&utm_campaign=bankmcp)\ndeploys the published image with a volume at `/data` and a domain, nothing\nto fill in. Or by hand: New Project, Deploy from GitHub repo, pick this\nrepo, add a volume mounted at `/data` and generate a domain (Settings,\nNetworking, port 8080). The server learns its own address from Railway.\n\n**Fly.io:** three commands from a checkout, using [fly.toml](fly.toml):\n\n```bash\nfly launch --copy-config --no-deploy   # pick an app name and region\nfly volumes create data --size 1\nfly deploy\n```\n\n**Render:** [![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/noskillish/bankmcp)\nuses [render.yaml](render.yaml). Render's persistent disks need a paid\ninstance.\n\n**Docker on your own box:**\n\n```bash\ndocker run -d --name bankmcp --restart unless-stopped \\\n  -p 8080:8080 -v bankmcp-data:/data ghcr.io/noskillish/bankmcp:latest\n```\n\nor `docker compose up -d` with [compose.yaml](compose.yaml). Then put a TLS\nterminator in front (Caddy needs two lines:\n`YOUR-HOST { reverse_proxy localhost:8080 }`) and set `BASE_URL` to the\npublic address.\n\nOpen the address. A fresh server shows a setup page.\n\n#### 2. Register an Enable Banking application\n\nThe setup page can do this for you. Enter the email of your Enable Banking\naccount (or the one you want to create it with) and press *Send me the\nsign-in link*. Enable Banking emails you a one-time link; paste it on the\nnext page. Your server signs in with it once, creates the application with\nthe right redirect and policy addresses, generates the key pair and stores\nthe id and the key. The sign-in is not kept. On a local server the click on\nthe link does the same without pasting.\n\nOr by hand: the setup page lists the exact values Enable Banking's form asks\nfor, with Copy buttons. At <https://enablebanking.com/cp/applications> create\nan application with them, keep *generate private key* selected, and save. A\n`.pem` file downloads once; that is the key. Paste the application id and\nchoose the `.pem` file on the setup page. Before anything is stored, the id\nand key are checked against Enable Banking.\n\nEither way: **Production** for your real accounts, **Sandbox** for test data.\nA production application for your own accounts is activated once in the\nControl Panel with *Activate by linking accounts*; see *Going live* below.\n\n#### 3. Finish setup\n\nChoose a password of twelve characters or more. A *Ready* page then shows\nwhat was checked: the application, whether its redirect URL is registered and\nwhether it is active, and the connector address to copy.\n\nPrefer configuration by environment? Set these and the setup page does not\nappear:\n\n#### 4. Add the connector in your assistant\n\nIn claude.ai (or the desktop app): **Settings → Connectors → Add custom\nconnector**. Name it `BankMCP™`, paste `https://YOUR-HOST/mcp`, save, then click\n**Connect**. Your server shows a password page; enter the admin password. That\nis the only login you will do.\n\nIn Claude Code:\n\n```bash\nclaude mcp add --transport http bank https://YOUR-HOST/mcp\n```\n\nthen run `/mcp` inside Claude Code to sign in.\n\nOther MCP clients (ChatGPT, Mistral Le Chat, Cursor, VS Code) work the same\nway: add the URL as a remote MCP server, sign in with the password. Tested\nwith Claude, Claude Code and Ollama; the others follow the same standard.\nA client whose domain is not in `ALLOWED_REDIRECT_HOSTS` needs adding there.\n\n#### 5. Connect your bank\n\nIn your assistant, say **\"connect my bank\"** (or use the `connect-bank` prompt). It\nlooks up your bank, gives you a link, you log in at the bank and approve, and\nthe accounts appear. Consents last up to 180 days; you are told when one\nis about to expire and the same conversation renews it.\n\nGive accounts labels (\"Everyday\", \"Joint expenses\", \"Mortgage\") when it\nsuggests them. Every tool accepts labels instead of ids.\n\n## Going live with your own accounts\n\nEnable Banking's production environment normally requires a contract, but it\nhas a **restricted mode** for accessing *your own* accounts, explicitly allowed\nfor individual non-commercial use. After registering a Production application:\n\n1. On the (Inactive) application click **Activate by linking accounts**.\n2. Log in at your bank and approve. Repeat for each bank you want.\n3. The application becomes active and the API returns only the accounts you\n   linked this way.\n\nRead the *Restriction of Use* section of Enable Banking's\n[Terms of Service](https://enablebanking.com/terms-of-service/) before you\nrely on it: restricted mode is for your own accounts, not for offering a\nservice to others. This project does not change those terms.\n\n## What you get\n\n**Tools** (all read-only):\n\n| Tool | What it does |\n|---|---|\n| `list_banks`, `start_consent`, `consent_status`, `disconnect_bank` | connect and manage banks |\n| `list_accounts`, `set_account_label` | accounts with booked balances; your own names for them |\n| `get_balances` | booked and available balance for one account |\n| `get_transactions` | signed amounts, one counterparty, one description; paginated |\n| `create_watch`, `list_watches`, `delete_watch`, `check_watches` | background rules with webhook notifications |\n\n**Prompts**: `connect-bank`, `monthly-summary`, `build-budget`,\n`savings-scan`, `subscription-audit`, `unusual-transactions`.\n\n**Watches** run on the server. Rules: balance below or above an amount, a\nsingle debit over an amount, an incoming or outgoing payment matching a name,\nand \"tell me if this payment has not arrived by this date\". Accounts are\nchecked at most four times a day, the PSD2 limit for unattended access.\nNotifications go to `NOTIFY_WEBHOOK_URL` as a Slack message or a JSON POST.\n\nEnable Banking's own webhooks cover payment initiation only, so account data\nis polled. There is no way around that under PSD2.\n\n## Claude Code plugin\n\nThe repository is also a Claude Code plugin marketplace. The `bank` plugin\nbrings three skills: `/bank:setup` walks you through installing BankMCP™ on\nyour machine, `/bank:deploy` through hosting it, and `bank` encodes how to work\nwith the data: an account map, categorisation rules, the monthly review format\nand when to create watches.\n\nPoint it at your server, then install:\n\n```bash\nexport OPENBANK_URL=https://YOUR-HOST/mcp   # put this in your shell profile\n```\n\n```\n/plugin marketplace add noskillish/bankmcp\n/plugin install bank@bank\n```\n\nThen `/mcp`, select `bank`, Authenticate, and enter your password. No\norganisation admin is involved; plugins are per user.\n\nThe skill lives at [plugin/skills/bank/SKILL.md](plugin/skills/bank/SKILL.md).\nCopy it into your own skills to fill in the account map and your merchant\nrules. The server stays generic; your rules stay yours.\n\n## Local models (experimental)\n\nThe server does not care which model asks. `npm run chat` bridges an\n[Ollama](https://ollama.com) model to the same tools over stdio, so no AI\nvendor sees a transaction:\n\n```bash\nollama pull qwen3:8b\nnpm run chat -- \"what's my balance?\"\n```\n\nMeasured on a MacBook Air with 24 GB: correct per-account balances, a wrong\ntotal, ten minutes per answer. An 8B model is not yet trustworthy with money;\na 30B-class model on a machine with a real GPU is where it gets useful. Any\nMCP client with tool calling (LM Studio, Goose, Jan) can also point at\n`node src/stdio.ts` directly. Enable Banking still sits between you and the\nbank either way; that part is regulated and unavoidable.\n\n## Security notes\n\n- The server is a complete OAuth 2.1 authorization server with one user.\n  Discovery, dynamic client registration and PKCE come from the MCP SDK;\n  tokens are stored hashed; five wrong passwords lock an address out for\n  fifteen minutes.\n- State is one JSON file in `DATA_DIR`: consents, account ids, watches (with\n  the ids of transactions that already fired) and OAuth tokens. Balances and\n  transactions are not written to disk. Your assistant keeps the\n  conversation as any chat does, and a watch notification carries the matched\n  transaction to your webhook. Back the file up if you care about not\n  re-consenting; delete it to forget everything.\n- Only clients that redirect back to a known MCP client domain (Claude,\n  ChatGPT, Mistral, Cursor, VS Code) or localhost can register\n  (`ALLOWED_REDIRECT_HOSTS`), which stops a phishing link from routing your sign-in to\n  another site. Using a client not on the list? Add its domain. The sign-in page also names the host you will\n  be sent back to.\n- Notifications go to one destination only: the `NOTIFY_WEBHOOK_URL` the\n  operator sets on the host, and it must be https. A watch cannot name its own\n  webhook, so a client or an assistant that has been talked into it cannot\n  point transaction data at another address or at something inside the\n  server's network.\n- Where the checks are, for anyone reading the code: every `/mcp` request\n  passes `requireBearerAuth` in `src/app.ts` before any tool runs; tokens are\n  issued and verified by `SingleUserProvider` in `src/auth.ts`, after the\n  password check in `completeLogin`. There is one user, so a valid token is the\n  whole authorisation and the tools carry no further per-user checks. In local\n  mode (`npx bankmcp`) there is no OAuth: the client on your machine talks to\n  the server over stdio, and whoever can run processes on that machine can use\n  it.\n- Anyone with the admin password can read your accounts. Use a long one.\n  Every successful sign-in is logged and, if `NOTIFY_WEBHOOK_URL` is set,\n  sent to you as a message. A sign-in you did not make is your alarm.\n- Forgot the password? Set `ADMIN_PASSWORD` (or `ADMIN_PASSWORD_HASH`) on the\n  host and restart; the environment wins over the value stored at setup.\n- Changing `ADMIN_PASSWORD_HASH` (or `ADMIN_PASSWORD`) and restarting logs\n  every client out. That is the kill switch. Revoking the consents at your\n  bank, or deleting the state file, is the step beyond it.\n- There are no payment tools. Payments need a licensed PISP and a very\n  different security model, so they are out of scope.\n\n## Commands\n\n```bash\nnpm start              # http server (reads env from the environment)\nnpm run dev            # same, with reload and .env\nnpm run check          # verify config and the Enable Banking application\nnpm run hash-password  # produce ADMIN_PASSWORD_HASH\nnpm run watch -- --force   # run all watches once, print what fired\nnpm test               # unit tests (node:test)\nnpm run typecheck\nsh scripts/build-mcpb.sh   # Claude Desktop bundle → dist/bankmcp.mcpb\nnpm run banks          # refresh docs/banks/banks.json from Enable Banking's bank list\nnpm run site           # build the subpages of the landing page into docs/\n```\n\nRequires Node 24 or newer (runs TypeScript directly, no build step).\n\n## Layout\n\n```\nsrc/stdio.ts          entry point for npx bankmcp: stdio server plus the localhost https side\nsrc/server.ts         entry point for a hosted deployment: OAuth, /mcp, callback, status page\nsrc/app.ts            the Express app shared by both entry points\nsrc/local.ts          localhost https server and self-signed certificate for local mode\nsrc/mcp.ts            McpServer factory (tools, prompts, instructions)\nsrc/tools.ts          the MCP tools\nsrc/prompts.ts        the MCP prompts\nsrc/watcher.ts        background rule checks and notifications\nsrc/auth.ts           single-user OAuth provider\nsrc/setup.ts          first-run setup: validates and stores id, key and password\nsrc/pages.ts          the HTML pages: setup, sign-in, connected, status, privacy, terms\nsrc/config.ts         environment and data-directory configuration\nsrc/enablebanking.ts  JWT signing and a thin typed API client\nsrc/store.ts          the JSON state file\nsrc/data.ts           shaping balances and transactions for an assistant\nsrc/cli.ts            check, hash-password, watch\nbin/bankmcp.js        the npx entry; dispatches to stdio or cli\nscripts/              build-mcpb.sh (Claude Desktop bundle), banks.ts and site.ts (landing subpages), local-chat.ts (Ollama bridge)\nplugin/               Claude Code plugin: setup and deploy skills, bank skill\ndocs/                 landing page (GitHub Pages, bankmcp.dk); docs/banks holds the bank list and its pages\n```\n\n## What this is, and is not\n\nBankMCP™ is software, not a service. There is no hosted BankMCP™, no account to sign\nup for, and nobody but you handles your server, your key or your bank\nconsents. Each person who uses it deploys their own copy and is the sole\noperator of that copy: they register their own Enable Banking application,\naccept Enable Banking's terms themselves, and are responsible for their own\nhosting, password and security.\n\nThe authors publish the code and nothing else. They do not run any instance\nfor others, receive no data, and are not affiliated with Enable Banking,\nAnthropic or any bank. BankMCP™ is not a bank, does not hold money, and gives no\nfinancial advice.\n\n**Use at your own risk.** If you deploy it, you own that deployment and its\nsecurity. The software is provided as is, without warranty of any kind, and\nthe authors accept no liability for how it is used or for any loss that\nfollows. MIT licence below.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}