经 AI Skill Hub 精选评估,开源MCP工具:Docker MCP server 获评「推荐使用」。这款MCP工具在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 7.5 分,适合有一定技术背景的用户使用。
连接Claude Desktop/LibreChat/LobeChat到Actual Budget,提高财务管理效率,实现智能预算跟踪。
开源MCP工具:Docker MCP server 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
连接Claude Desktop/LibreChat/LobeChat到Actual Budget,提高财务管理效率,实现智能预算跟踪。
开源MCP工具:Docker MCP server 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/agigante80/actual-mcp-server
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"--mcp---docker-mcp-server": {
"command": "npx",
"args": ["-y", "actual-mcp-server"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 开源MCP工具:Docker MCP server 执行以下任务... Claude: [自动调用 开源MCP工具:Docker MCP server MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"__mcp___docker_mcp_server": {
"command": "npx",
"args": ["-y", "actual-mcp-server"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
Talk to your budget. Run it anywhere. Trust it in production.
Actual MCP Server is a Model Context Protocol server that connects any MCP-compatible AI assistant (such as LibreChat, LobeChat, Claude Desktop, and more) directly to your self-hosted Actual Budget instance. Ask natural language questions, create transactions, analyse spending, and manage your entire budget without ever opening the Actual Budget UI.
┌─────────────┐ MCP/HTTP ┌──────────────────┐ Actual API ┌──────────────┐
│ LibreChat │ ◄───────────► │ Actual MCP │ ◄───────────► │ Actual │
│ LobeChat │ │ Server │ │ Budget │
│ (remote) │ │ (71 tools) │ │ Server │
└─────────────┘ └──────────────────┘ └──────────────┘
┌─────────────┐ MCP/stdio ┌──────────────────┐ Actual API ┌──────────────┐
│ Claude │ ◄───────────► │ Actual MCP │ ◄───────────► │ Actual │
│ Desktop │ │ Server │ │ Budget │
│ (local) │ │ (71 tools) │ │ Server │
└─────────────┘ └──────────────────┘ └──────────────┘
docker run -d \
--name actual-mcp-server-backend \
-p 3600:3600 \
# Use the same URL you type in your browser to open Actual Budget:
# http://localhost:5006 (if Actual Budget runs on the same machine)
# http://192.168.1.50:5006 (if it runs on another machine on your network)
# https://actual.yourdomain.com (if you use a domain name)
# http://actual:5006 (if both containers share a Docker network; use container name)
-e ACTUAL_SERVER_URL=http://localhost:5006 \
-e ACTUAL_PASSWORD=your_password \
-e ACTUAL_BUDGET_SYNC_ID=your_sync_id \
-e MCP_SSE_AUTHORIZATION=your_secret_token \
-v actual-mcp-data:/app/data \ # required, see note below
-v actual-mcp-logs:/app/logs \
ghcr.io/agigante80/actual-mcp-server:latest
Why the/app/datavolume is required: Actual Budget does not expose a REST API. The official@actual-app/apilibrary (used internally by this server) works by downloading a local copy of your budget data, running all queries on that local copy, then syncing changes back. The/app/datavolume gives the container a persistent, writable place to store that local copy (it is the directory the image creates and owns as the runtime user). Without it the container has nowhere to write and will fail on startup. See the Actual API docs for details. actual-mcp does not need to run on the same machine as Actual Budget. You can have Actual Budget on one server and actual-mcp on another - as long asACTUAL_SERVER_URLpoints to your Actual Budget instance, everything works.
Verify it's running:
```bash
```bash git clone https://github.com/agigante80/actual-mcp-server.git cd actual-mcp-server cp .env.example .env # fill in ACTUAL_SERVER_URL, ACTUAL_PASSWORD, ACTUAL_BUDGET_SYNC_ID
docker compose --profile production up -d # production: MCP server listens on :3600
The stdio transport runs the MCP server as a child process. Claude Desktop spawns it directly and communicates over stdin/stdout. No network port, no auth token, no Docker required. No cloning needed: npx downloads and caches the package automatically.
Add to claude_desktop_config.json (see docs/guides/MCP_CLIENTS_SETUP.md for config file location and all client options):
{
"mcpServers": {
"actual-budget": {
"command": "npx",
"args": ["-y", "actual-mcp-server", "--stdio"],
"env": {
"ACTUAL_SERVER_URL": "http://localhost:5006",
"ACTUAL_PASSWORD": "your_actual_password",
"ACTUAL_BUDGET_SYNC_ID": "your-sync-id-here",
"MCP_BRIDGE_DATA_DIR": "/absolute/path/to/data-dir"
}
}
}
}
No token needed. stdio runs as a local process owned by your user. The transport itself is the security boundary. All 71 tools are available. MCP_BRIDGE_DATA_DIR should be an absolute path. Without one, the data directory resolves relative to wherever the client spawns the process, which can be unpredictable. The directory is created automatically on first run.
```bash docker pull ghcr.io/agigante80/actual-mcp-server:latest docker stop actual-mcp-server-backend docker rm actual-mcp-server-backend
```
Also available on Docker Hub: docker pull agigante80/actual-mcp-server:latest
docker compose pull
docker compose --profile production up -d
npm install -g actual-mcp-server
npx actual-mcp-server@latest --http ```
For Claude Desktop (stdio), restart Claude after upgrading.
---
ACTUAL_SERVER_URL=http://localhost:5006 \ ACTUAL_PASSWORD=your_password \ ACTUAL_BUDGET_SYNC_ID=your-sync-id \ MCP_SSE_AUTHORIZATION=your_token \ npx actual-mcp-server --http
```bash
git clone https://github.com/agigante80/actual-mcp-server.git cd actual-mcp-server npm install cp .env.example .env # fill in required values npm run build npm run dev -- --http ```
Server starts at http://localhost:3600/http by default (the listen port is MCP_BRIDGE_PORT, default 3600).
```bash git pull npm install npm run build
If you run npx actual-mcp-server without a globally installed version, npx fetches the latest from the registry automatically. But if you previously installed it globally (npm install -g actual-mcp-server), the global install takes precedence, so you must upgrade it explicitly:
```bash
All configuration is via environment variables. Copy .env.example to .env to get started.
| Variable | Default | Required | Description |
|---|---|---|---|
| **Actual Budget Connection** | |||
ACTUAL_SERVER_URL | _(none)_ | Yes | URL of your Actual Budget server. Use the same URL you type in your browser: http://localhost:5006 (local), http://192.168.1.x:5006 (network), https://actual.yourdomain.com (domain), or http://actual:5006 (container name if on the same Docker network) |
ACTUAL_PASSWORD | _(none)_ | Yes | Password for Actual Budget server |
ACTUAL_BUDGET_SYNC_ID | _(none)_ | Yes | Budget Sync ID from Actual (Settings then Sync ID) |
ACTUAL_BUDGET_PASSWORD | _(none)_ | No | Optional encryption password for encrypted budgets |
ALLOW_INSECURE_UPSTREAM | false | No | Allow an http:// upstream even when ACTUAL_BUDGET_PASSWORD is set (#161). Off by default so a plaintext upstream plus an encryption password is refused |
| **MCP Server Settings** | |||
MCP_BRIDGE_PORT | 3600 | No | Port for MCP server to listen on |
MCP_BRIDGE_BIND_HOST | 0.0.0.0 | No | Host address to bind server to (0.0.0.0 = all interfaces) |
MCP_BRIDGE_DATA_DIR | ./actual-data | No | Directory to store Actual Budget local data (SQLite). **Required to be a persistent path.** The @actual-app/api library downloads a local copy of your budget here to run queries; use a volume mount in Docker to persist it across restarts |
MCP_BRIDGE_PUBLIC_HOST | auto-detected | No | Public hostname/IP for server (shown in logs) |
MCP_BRIDGE_PUBLIC_SCHEME | auto-detected | No | Public scheme (http or https) |
MCP_BRIDGE_USE_TLS | false | No | Set to true to advertise https:// in the server URL (for reverse-proxy setups where TLS is terminated upstream) |
| **Transport Configuration** | |||
MCP_TRANSPORT_MODE | --http | No | Transport mode. Only --http is a valid value; stdio is selected via the --stdio CLI flag, not this var |
MCP_HTTP_PATH | /http | No | HTTP endpoint routing path |
MCP_BRIDGE_HTTP_PATH | same as MCP_HTTP_PATH | No | Advertised HTTP path shown to clients (set when a reverse proxy rewrites the path) |
MCP_HTTP_BODY_LIMIT | 512kb | No | Maximum accepted JSON-RPC request body size (e.g. 512kb, 1mb) |
| **Session Management** | |||
USE_CONNECTION_POOL | true | No | Enable session-based connection pooling |
MAX_CONCURRENT_SESSIONS | 15 | No | Maximum concurrent MCP sessions allowed |
SESSION_IDLE_TIMEOUT_MINUTES | 5 | No | Minutes before idle session cleanup |
| **Security & Authentication** | |||
AUTH_PROVIDER | none | No | Auth mode: none (static Bearer) or oidc (JWKS-validated JWT) |
MCP_SSE_AUTHORIZATION | _(none)_ | No | Static Bearer token (AUTH_PROVIDER=none; highly recommended in production) |
OIDC_ISSUER | _(none)_ | If OIDC | OIDC issuer URL (e.g., https://sso.example.com) |
OIDC_RESOURCE | _(none)_ | No | Expected aud claim in JWT (your client ID) |
OIDC_SCOPES | _(none)_ | No | Comma-separated required scopes; leave empty for Casdoor |
AUTH_BUDGET_ACL | _(none)_ | No | Per-user budget ACL; see [AI Client Setup](docs/guides/AI_CLIENT_SETUP.md#oidc-authentication-multi-user) |
MCP_ENABLE_HTTPS | false | No | Enable native TLS. Requires MCP_HTTPS_CERT and MCP_HTTPS_KEY |
MCP_HTTPS_CERT | _(none)_ | No | Path to PEM certificate file (required when MCP_ENABLE_HTTPS=true) |
MCP_HTTPS_KEY | _(none)_ | No | Path to PEM private key file (required when MCP_ENABLE_HTTPS=true) |
| **Logging Configuration** | |||
MCP_BRIDGE_STORE_LOGS | false | No | Enable file logging (vs console only) |
MCP_BRIDGE_LOG_DIR | app/logs (beside the install) | No | Directory for log files (if STORE_LOGS=true). .env.example and Docker set it explicitly (e.g. ./logs, /app/logs) |
MCP_BRIDGE_LOG_LEVEL | debug (dev) / info (prod) | No | Log level: error, warn, info, debug |
LOG_FORMAT | auto | No | Log output format: json or pretty. Precedence: explicit LOG_FORMAT wins, else NODE_ENV=production selects json, else pretty |
MCP_SERVICE_NAME | actual-mcp-server | No | Service name stamped on every structured (json) log record |
**Log Rotation** (when MCP_BRIDGE_STORE_LOGS=true) | |||
MCP_BRIDGE_MAX_FILES | 14d | No | Keep rotated logs for N days (e.g., 14d, 30d) |
MCP_BRIDGE_MAX_LOG_SIZE | 20m | No | Rotate when file reaches size (e.g., 20m, 100m) |
MCP_BRIDGE_ROTATE_DATEPATTERN | YYYY-MM-DD | No | Date pattern for rotated log filenames |
| **Development & Debugging** | |||
DEBUG | _(none)_ | No | Enable debug mode (verbose logging) when set to any truthy value |
LOG_LEVEL | _(none)_ | No | Debug-detection toggle: set to debug to enable extra transport debug output. Distinct from MCP_BRIDGE_LOG_LEVEL (the winston level); has no default and is not itself a log level |
MCP_BRIDGE_DEBUG_TRANSPORT | false | No | Enable transport-level debug logging |
| **Advanced/Internal** | |||
ACTUAL_API_CONCURRENCY | 5 | No | Max concurrent Actual API operations |
NODE_ENV | _(none)_ / production | No | Node environment. No app default; the Docker image sets production, which selects json logs and hides stack traces in error responses |
VERSION | auto-detected | No | Server version (auto-set by build/Docker) |
TZ | UTC | No | Timezone for timestamps (e.g., America/New_York) |
---
MCP_SSE_AUTHORIZATION=your_token_here
Clients send: `Authorization: Bearer your_token_here`
#### OIDC (multi-user)
bash AUTH_PROVIDER=oidc OIDC_ISSUER=https://sso.yourdomain.com OIDC_RESOURCE=your-client-id # must match 'aud' JWT claim OIDC_SCOPES= # leave empty for Casdoor ```
See AI Client Setup, OIDC for AUTH_BUDGET_ACL format and Casdoor notes.
---
Several MCP servers exist for personal finance management. Here's how this project compares with the closest alternatives.
Snapshot date: 2026-03-20. Versions and features reflect each project's latest release at that date.
| Feature | **agigante80/actual-mcp-server** | [s-stefanov/actual-mcp](https://github.com/s-stefanov/actual-mcp) | [henfrydls/actual-budget-mcp](https://github.com/henfrydls/actual-budget-mcp) | [WGDevelopment/ynab-mcp-server](https://github.com/WGDevelopment/ynab-mcp-server) |
|---|---|---|---|---|
| **Version** | v0.4.26 | v1.11.1 | v0.2.0 | v0.1.0 |
| **Budget App** | Actual Budget (self-hosted) | Actual Budget (self-hosted) | Actual Budget (self-hosted) | YNAB (cloud, subscription) |
| **Language** | TypeScript / Node.js | TypeScript / Node.js | TypeScript / Node.js | Python |
| **Tool Count** | **71** | ~22 | 18 | 9 |
| **Setup & Distribution** | ||||
| **Transport** | HTTP + stdio | STDIO + SSE option | STDIO | STDIO |
| **Docker support** | ✅ Full (image + Compose) | ✅ Image only | ❌ | ❌ |
| **Published package (npx/pip)** | ✅ npx actual-mcp-server | ✅ npx actual-mcp | ✅ npx actual-budget-mcp | ✅ pip install ynab-mcp |
| **Security & Access** | ||||
| **Authentication** | ✅ Bearer token + OIDC (JWKS) | ⚠️ Optional Bearer token | ❌ None (local only) | ✅ OS keyring / env var |
| **Read-only mode** | ❌ All tools always available | ✅ Write requires --enable-write flag | ❌ | ✅ Most tools are read-only |
| **Multi-budget switching** | ✅ Runtime switch via tool | ❌ | ❌ | ✅ (YNAB natively multi-budget) |
| **Production & Reliability** | ||||
| **Connection pooling** | ✅ Up to 15 concurrent sessions | ❌ | ❌ | ❌ |
| **Retry / backoff** | ✅ 3 attempts, exponential backoff | ❌ | ❌ | ❌ |
| **Automated test suite** | ✅ Unit + E2E + integration | ❌ | ❌ | ❌ |
| **Transactions** | ||||
| **Create / update / delete** | ✅ | ✅ | ✅ | ✅ |
| **Import & reconcile** | ✅ actual_transactions_import | ❌ | ❌ | ❌ |
| **Scheduled / recurring** | ❌ (planned) | ❌ | ❌ | ❌ |
| **Analysis & Reporting** | ||||
| **ActualQL custom queries** | ✅ 6 exclusive tools + actual_query_run | ❌ | ❌ | N/A |
| **Summary by category / payee** | ✅ | ✅ spending-by-category | ✅ | ❌ |
| **Spending projections / forecast** | ❌ | ❌ | ✅ end-of-month forecast | ❌ |
| **Budget vs actual comparison** | ✅ via actual_budgets_getMonth | ❌ | ✅ dedicated tool | ✅ month summary |
| **Bank sync** | ✅ GoCardless / SimpleFIN | ❌ | ✅ | ❌ (YNAB handles sync natively) |
| **Budget Management** | ||||
| **Set / transfer / carryover / hold** | ✅ Full (10 tools) | ❌ | ✅ Partial | ✅ Partial |
| **Batch budget updates** | ✅ actual_budget_updates_batch | ❌ | ❌ | ❌ |
| **Accounts, Payees & Rules** | ||||
| **Account lifecycle (close/reopen)** | ✅ | ❌ | ❌ | N/A |
| **Payee merging** | ✅ actual_payees_merge | ❌ | ❌ | N/A |
| **Payee rules management** | ✅ Full CRUD | ✅ Full CRUD | ❌ | N/A |
| **UX & Usability** | ||||
| **Natural language date parsing** | ❌ YYYY-MM-DD required | ❌ | ✅ "last month", "yesterday" | ❌ |
| **Bilingual support** | ❌ | ❌ | ✅ English + Spanish | ❌ |
| **Auto name → UUID resolution** | ⚠️ Explicit tool (actual_get_id_by_name) | ❌ | ✅ Automatic in all tools | ❌ |
| **AI prompt templates** | ❌ | ✅ financial-insights, budget-review | ❌ | ❌ |
| **Tested AI clients** | LibreChat, LobeChat | Claude Desktop, Codex | Claude Desktop, Cursor, VS Code | Claude Code |
| **License** | MIT | MIT | MIT | MIT |
该项目提供了一个开源的MCP工具,用于连接AI助手和财务管理系统,提高财务管理效率,实现智能预算跟踪。虽然项目质量较高,但仍需要进一步优化和完善。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:开源MCP工具:Docker MCP server 的核心功能完整,质量良好。对于Claude Desktop / Claude Code 用户来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | actual-mcp-server |
| 原始描述 | 开源MCP工具:Docker MCP server connecting Claude Desktop/LibreChat/LobeChat to Actual Budget 。⭐19 · TypeScript |
| Topics | mcpactual-budgetai-assistantapi-serverbudget-managementbudget-tracking |
| GitHub | https://github.com/agigante80/actual-mcp-server |
| License | MIT |
| 语言 | TypeScript |
收录时间:2026-06-10 · 更新时间:2026-06-10 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端