PluMRR MCP客户端
LibreChat的独立HTTP/SSE MCP服务器。隔离在 mcp-client 有自己的Dockerfile。
建筑
- 无状态:没有服务器端会话/cookie持久性,没有cookie jar,没有全局变量。
- LibreChat凭据(推荐):配置MCP
headers 在LibreChat中(例如。 X-Plumrr-Email / X-Plumrr-Password).服务器读取这些 每个传入的HTTP请求 到 /mcp,为该请求执行一次上游登录(仅在请求期间缓存在内存中),并将生成的Cookie用于工具调用。LLM确实如此 不 收到您的密码,无需拨打电话 auth_login 第一。 - 手动cookie模式:或者,致电
auth_login 使用电子邮件/密码和密码 cookieHeader 在以后的工具上(或者依赖LibreChat头文件)。 - 允许列出:仅公开已批准的GET端点和身份验证操作。对路径参数进行消毒,防止遍历注入。
- 会话感知:MCP协议会话按照
mcp-session-id 标头(MCP Streamable HTTP规范要求),但在HTTP请求之间没有在服务器端存储PluMRR用户身份验证。
可用工具
认证
| 工具 | 说明 |
|---|
auth_login | 使用电子邮件/密码进行身份验证。返回设置要存储的Cookie值。 |
auth_refresh | 刷新访问令牌cookie。收到401后拨打。 |
auth_logout | 终端用户会话。之后丢弃存储的Cookie。 |
auth_me | 获取当前经过身份验证的用户配置文件。 |
合同
| 工具 | 说明 |
|---|
contracts_get_all | 列出客户之间的所有合同。 |
contracts_list | 从索引端点列出合约。 |
contracts_get_current_for_customer | 为一个客户(按ID或姓名)获取有效合同。 |
contracts_get_customer_losses | 获取客户合同的损失记录。 |
contracts_get_customer_sanity_check | 对客户的合同进行健全性检查。 |
contracts_get_customer_order_items | 获取客户合同的订单项。 |
contracts_get_customer_recurring_orders | 为客户获取定期订单。 |
contracts_get_customer_item_overrides | 为客户获取项目覆盖。 |
contracts_check_order_timeframes | 验证特定订单的时间范围。 |
客户
| 工具 | 说明 |
|---|
customers_list | 列出或搜索客户(searchTerm, limit).搜索时的模糊排名。 |
customers_get_by_id | 通过数字ID获取一个客户 |
平均倒数排名
| 工具 | 说明 |
|---|
mrr_get_customer_data | 获取一个客户的MRR数据。 |
报告
| 工具 | 说明 |
|---|
reports_get_filter_options | 获取可用的报告筛选器。 |
reports_get_customer_world_map | 获取地理客户数据。 |
reports_get_lorenz_curve_filter_options | 获取洛伦兹曲线报告过滤器。 |
reports_get_lost_won_customers | 获得输赢客户分析。 |
reports_get_lost_won_customers_status | 获取失物招领报告生成状态。 |
reports_get_expansion_waterfall | 获取MRR瀑布数据。需要 month (YYYY-MM);支持过滤器阵列。 |
reports_get_ltv | 获取客户终身价值数据。需要 end_month (YYYY-MM);支持可选队列和过滤器参数。 |
客户损失
| 工具 | 说明 |
|---|
customer_losses_list | 按页码列出损失条目(limit, offset)可选 search (管理员/编辑)。 |
customer_losses_list_all | 自动分页和汇总所有客户流失页面(管理员/编辑)。 |
customer_losses_get_by_id | 按ID(管理员/编辑)获取一条损失记录。 |
嵌入报告
| 工具 | 说明 |
|---|
reports_embed_get | 通过slug获取公开/嵌入报告。 |
环境
| 变量 | 默认值 | 描述 |
|---|
PLUMRR_API_BASE_URL | http://host.docker.internal:8000 | 上游PluMRR API |
MCP_PORT | 8001 | MCP HTTP服务器的端口 |
LOG_LEVEL | info | 日志冗长 |
PLUMRR_CREDENTIAL_HEADER_EMAIL | X-Plumrr-Email | 必须与电子邮件的LibreChat MCP标题名称匹配 |
PLUMRR_CREDENTIAL_HEADER_PASSWORD | X-Plumrr-Password | 密码必须与LibreChat MCP标头名称匹配 |
MCP_BASE_URL | http://localhost:${MCP_PORT} | 仅测试集成脚本目标的覆盖 |
在本地运行
npm install
npm run dev
服务器终结点:
- 健康:
GET /health - MCP:
POST /mcp (初始化+工具调用), GET /mcp (SSE流), DELETE /mcp (闭幕式)
码头工人
docker build -t plumrr-mcp-client .
docker run --rm -p 8001:8001 \
-e PLUMRR_API_BASE_URL=http://host.docker.internal:8000 \
plumrr-mcp-client
Docker Compose(项目本地)
此项目包含自己的编写文件,位于 mcp-client/docker-compose.yml.
- 复制环境默认值:
cp .env.example .env
- 编辑
.env (MCP_PORT, PLUMRR_API_BASE_URL, LOG_LEVEL) - 开始:
docker compose up --build -d
- 停止:
docker compose down
LibreChat配置
plumrr-mcp:
title: "PluMRR API"
description: "Read-only PluMRR MCP with stateless cookie auth forwarding"
type: streamable-http
url: "http://host.docker.internal:8001/mcp"
headers:
X-Plumrr-Email: "{{PLUMRR_EMAIL}}"
X-Plumrr-Password: "{{PLUMRR_PASSWORD}}"
customUserVars:
PLUMRR_EMAIL:
title: "PluMRR Email"
description: "Your PluMRR email address"
PLUMRR_PASSWORD:
title: "PluMRR Password"
description: "Your PluMRR password"
标头用于将凭证传递到MCP工具中。MCP不持久会话;调用者在每次工具调用时提供Cookie。
集成测试
test/integration-manual.mjs 现在使用环境驱动的目标:
MCP_PORT (默认值 8001)MCP_BASE_URL (可选,覆盖 http://localhost:${MCP_PORT})PLUMRR_EMAIL (必填)PLUMRR_PASSWORD (必填)
例子:
PLUMRR_EMAIL="user@example.com" \
PLUMRR_PASSWORD="secret" \
MCP_PORT=8010 \
node test/integration-manual.mjs