@chrischall/concur-mcp

中文文档
0.5.0发布于 2026/11/07MITES Module构建来源已验证近 30 天下载 2256

Claude的非官方SAP协议MCP服务器——支出报告、支出、收据和出行——由AI(Claude代码)开发和维护

中文使用文档
文档目录22 节
  1. 尽你所能
  2. 所需资源
  3. 安装
  4. Claude 代码插件
  5. 任意 MCP 主机( npx)
  6. 克洛德桌面 (. mcpb)
  7. 如何认证
  8. 配对(一次)
  9. 配置
  10. 确认写入
  11. 工具
  12. 会话和浏览
  13. 报告和开支(阅读)
  14. 报告和开支(写——全部确认)
  15. 参与者
  16. 收款
  17. 旅费
  18. 逃生舱
  19. 范围外
  20. 升级
  21. 发展
  22. 许可证

SAP 商定 MCP

CI npm license

A 类 示范背景协议 连接克劳德的服务器 SAP 已商定:您的支出报告、支出、可用(未记账)支出、收据和旅行旅行——读作: 财务报告和审定财务报表 写,每写确认.

[尖叫声] AI开发的项目. 这个代码库是完全建成的,并且由 克劳德没有任何人对执行情况进行过审计。 在使用前审查所有代码和工具权限 .

[叹息] 非官方而无所支持. 此服务器不使用 Concur 所记录的伙伴 API 。 它将内部 GraphQL API 称为 Concur 网络应用程序本身, 由您自己签名的浏览器会话认证 。 它可能在不事先通知的情况下中断,自动使用可能会与SAP Concour或你的雇主的条款相冲突. 仅供自用,自酌取用.

尽你所能

问克洛德什么的:

  • "我的协和会的哪些报告仍未提交,什么阻碍着它们?"
  • "给我看看还没有上报的卡片交易"
  • "创造一份叫做"奥斯汀离地"的报告,并将上星期的"Uber"和"酒店收费"移至其中
  • "上载~/下载/餐饮.pdf 并附入餐饮费用"
  • "我下次旅行是什么时候出发的 我住哪家酒店?"

所需资源

  • 克劳德桌面, Claude 代码或任何 MCP 主机
  • 节点.js 22.5年或以后
  • 这个 上下文闪烁桥 浏览器扩展和一个已签名的 Concur 标签( )https://<dc>.concursolutions.com/…(中文(简体) )

安装

Claude 代码插件

claude plugin marketplace add chrischall/concur-mcp
claude plugin install concur@chrischall

任意 MCP 主机( npx)

{
  "mcpServers": {
    "concur": {
      "command": "npx",
      "args": ["-y", "@chrischall/concur-mcp"],
      "env": { "CONCUR_DC": "us2" }
    }
  }
}

克洛德桌面 (. mcpb)

安装 .mcpb 从 最新发布。安装器请求您的数据中心(默认) us2) (中文(简体) ).

如何认证

Concour的网络应用认证了它的API 调用 Http JWT 饼干,页面本身无法读取。 此服务器使用 获取代理 桥 仅读取 三场曲奇 您的签名标签: JWT,加上 Concour 遗留的会话饼干 OTSESSIONAABQRD 财务报告和审定财务报表 OTSESSIONAABQRN,然后从节点调用 Authorization: Bearer <jwt> (单位:千美元) Cookie 带有标签上的任何OTSESSION cookie的页眉——Concour的部分仍然由其遗留的服务(报告密钥,货币,可用收件,权限)来回答一个没有它们的错误. 饼干只被保存在记忆中,从不出现在出错或日志中;您家目录下所写的唯一东西就是桥的配对身份.

信物活了60分钟 服务器从您的标签中重新读取饼干( 全部一起) , 当符号在过期后两分钟内, 或者一次在 a 401 (每通电话重读一通并重试一通,绝无回环. 读取失败的方式 一个 Stale OTSESSION cookie 失败 获得相同的单重读和再试。 在打开标签时,Concor要保持饼干新鲜,所以 继续打开已签名的标签 当你使用工具. concur_healthcheck 报告哪一个来源提供了信使,它还剩了多少分钟,是否找到遗留的会话 cookie —— 从来不是一个 cookie 值.

从早先的建筑升级? 桥梁范围从 JWT 单独到 JWT +两个口味饼干。 双倍给付是透视的,所以一个已经发售的服务器必须是 重新核准一次:下个调用答案并带有新的一对代码(或范围更改后的通知)——在上下文Mint Bridge弹出中批准.

配对(一次)

  1. 安装 上下文闪烁桥 (Chrome:装入解开的放出拉链) 并在浏览器中签入 Concure.
  2. 叫克劳德跑 concur_healthcheck。第一个呼叫答案是 配对代码。 。 。 .
  3. 批准上下文Mint桥的代码 这种信任贯穿于重启期间(它生活在 ~/.fetchproxy/identity/) (中文(简体) ).

不止一个浏览器? 如果在几个浏览器中安装了ContextMint Bridge,则每个浏览器都会拨打同一个本地端口,其中任何一个都可以批准对接码. 在您的 Concure 会话的浏览器中批准 ——服务器在批准哪个扩展时标出,只有浏览器的分页才能提供cookie. 线条类 refusing an extension whose identity is not the one this MCP paired with {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}在石刻上是 其他项目 浏览器被转走,是无害的.

错误的浏览器, 还是改变浏览器 ? 撤销 concur-mcp 在上下文Mint Bridge弹出时,用 fpx trust clear concur-mcp (从) @fetchproxy/cli;或删除 ~/.fetchproxy/identity/concur-mcp.extension-trust.json),重新启动服务器,并从右侧浏览器再次对齐.

配置

新闻 var默认目的
CONCUR_DCus2您的数据中心: 您登录标签主机的第一个标签( Nameus2 页:1 us2.concursolutions.com, (中文(简体) ), eu2(中文(简体) ). 必须匹配会话令牌的发件人, 或者每一次通话都出现错误, 显示要使用哪个值 .
CONCUR_WS_PORT37149接接接接接通的桥口 整个接取代理机队和背景明通桥共享 37149; 仅针对本地测试(或当一个主机注入每个注册端口时)进行超标.
CONCUR_OUTPUT_DIR~/Downloads/concur-mcp何处 concur_get_receipt 保存已下载的收据( 绝不覆盖已有文件) .
CONCUR_UPLOAD_ROOTS~/Downloads, (中文(简体) ), ~/Documents, (中文(简体) ), ~/Desktop,加上当它是您家目录中的文件夹时的 cwd(绝不) / 或家本身 – Claude 桌面在 /(中文(简体) )唯一的文件夹 concur_upload_receipt 将从(一个分隔路径的列表)读取; ~ 页:1 主机服务器拒绝每次 path (使用时 concur_upload_slots 或者说 inline) (中文(简体) ).
CONCUR_INLINE_RECEIPTS本地关闭, 当主机运行时true 制造 concur_get_receipt 返回结果中的图像,而不是写入一个文件(超过 10 MiB 被本地保存,或主机时的签名链接).
MCP_USER_TZ服务器区域您的 IANA 时区( 如 . America/New_York),用于“今天” concur_create_report 默认 reportDate. 设定为主机时——主机服务器运行于协调世界时,否则明天将会有一份晚报.
CONCUR_DEBUG关将桥上的角色和寿命周期记录为 stderr.
MCP_CONFIRM_MODEask-user无法显示确认提示的客户端的写作——见下文.
MCP_CONFIRM_ELICITATIONonoff 从不显示确认提示, 所以每个客户端都拿走 MCP_CONFIRM_MODE 路径(对于声明提示但从未给出提示的客户).

确认写入

每个改变Concoun(或电子邮件某人)内容的工具都会被确认:

  • 支持MCP诱导的客户端 显示真实的确认提示, 准确描述将发送什么 .
  • 其他地方(Claude.ai、克洛德桌面) 第一通电话 没有 更改: 它返回一个精确的预览, 将会发送什么, 加上一个单一用途, 短寿命 confirmToken。如果请求中有任何变化,则拒绝.

MCP_CONFIRM_MODE 决定谁可以使用该标志:

数值行为
ask-user (默认)模型必须显示预览,并在重用符号前在聊天中获得您的批准.
auto模型在看到预览后可能使用符号本身.
refuse拒绝给客户写作,没有立即确认。 未识别值作为 refuse。 。 。 .

来自Concure的文本——卖主名,评论,出行细节,电子邮件——被作为不信任的数据处理:它永远不能授权写作.

工具

大部分读取工具 view: compact | full | raw (默认) compact: compact 放弃你很少需要的字段, full 全部留着, raw 是未预测的 Concor 响应.

会话和浏览

工具它会做什么
concur_healthcheck哪个来源提供了代号, API是否接受, 往返时间, 过期分钟
concur_whoami您的用户身份、 数据中心、 符号分钟和启用的特性
concur_list_expense_types报告政策允许的开销( ID、 名称、 组)
concur_list_payment_types支付类型,您可以支付费用(现金,公司卡,.)
concur_list_currencies接受,可选择过滤
concur_search_locations按城市分列的支出地点(可选的国家/分区)

报告和开支(阅读)

工具它会做什么
concur_list_reports按状况分列的报告ALL, (中文(简体) ), ACTIVE, (中文(简体) ), UNSUBMITTED, (中文(简体) ), SENT_FOR_PAYMENT)和日期范围
concur_get_report一份报告:标题、每个支出条目及其例外blocking 防止提交)
concur_get_report_timeline报告的时间表(评论和工作流程活动)和审计线索
concur_get_expense一项费用:按标签、项目、收货、评论、例外情况列出表格字段
concur_list_available_expenses尚未上报的卡片交易、电子收发和移动抓取

报告和开支(写——全部确认)

工具它会做什么可逆转?
concur_create_report创建未提交的报告对(concur_delete_report(中文(简体) )
concur_update_report更改标题字段; 只发送更改对
concur_delete_report删除未提交的报告 和一切费用没有
concur_add_report_comment增加一个评论批准人没有 (无法删除评论)
concur_submit_report向您的审批人发送报告没有 达到一个人; concur_recall_report 在批准前可以收回
concur_recall_report回顾已提交的未经核准的报告对
concur_create_expense在未提交的报表中添加一个费用; 任何可按标签编辑的表格字段( 海关、 车票号码、 从/ 到位置,...); 外币获得日期的汇率对
concur_update_expense改变开支,包括这些表格字段和汇率;只发送变化对
concur_delete_expenses从报告中删除支出(卡片交易返回现有支出)没有
concur_copy_expense复制费用对
concur_move_available_expenses_to_report将可用费用移至报告没有 (双方没有退后)
concur_delete_available_expenses删除现有费用没有

参与者

工具它会做什么可逆转?
concur_search_attendees通过名称或电子邮件搜索参与者目录( 同事、 已保存的来宾)读取
concur_set_attendees替换 费用参与者列表(您先默认),平分金额——确认额没有 (没有工具读取以前的列表, 或清除它)

收款

工具它会做什么甘地吗?
concur_list_available_receipts在您的收货店中接收不计入支出的图像读取
concur_get_receipt下载一个收件图像(%% 25 MB): 至 CONCUR_OUTPUT_DIR 本地、内联网或10个以上的MiB的签名下载链接,有效期为1小时无( 商定不变)
concur_upload_slots已签名的上传 URL( 已准备好) curl)将接收文件发送给主机服务器无( 只签名 URL)
concur_upload_receipt从允许的本地文件夹上传 png / jpg / pdf (%% 25 MB) (path,仅本地安装),作为 base64 (inline),或从上传槽(blobKey(中文(简体) )对
concur_attach_receipt将存储的图像附加到一个没有成本的成本中对
concur_append_receipt添加已存储的图像作为支出收据的额外页面对
concur_detach_receipt把图像从开支中取出对
concur_add_missing_receipt_declaration缺少收据申报表(ffidavit),用于没有收据的开支 -- 您证明收据丢失;预览会显示您的策略声明文本。 没有工具删除一个( 附加一个收件替换它)对
concur_delete_receipt删除一个未附带的收件图像 —— 无法被撤销对

旅费

工具它会做什么
concur_list_trips您的旅行( 默认即将进行; 过去或全部), 可过滤
concur_get_trip搭乘飞机、旅馆、汽车和铁路的一程
concur_get_trip_history旅行历史:变更、批准、行程电子邮件
concur_send_itinerary发送旅行行程 发送真实的电子邮件,确认

逃生舱

工具它会做什么
concur_list_operationsGraphQL 操作 Concur Web 应用程序使用的名称、 终点、 目的, 以及已经运行的专用工具
concur_graphql_query运行原始的只读查询( E)spend 或者说 cds 结束点);拒绝任何可以写入的内容
concur_graphql_mutation运行一个原始的突变, 在预览中以完整的文档确认; 拒绝包含提交在内的范围外的操作( 使用) concur_submit_report(中文(简体) )

范围外

这些在Concure中存在,但是是故意的 没有 已经建成。 未建成与被拒绝不同:生出逃生舱口仍能到达警卫不取名的下方.

被拒绝 concur_graphql_mutation (按操作名称和字段匹配网络应用程序的文本选择,所以重命名或化名无法通路): processApproval, (中文(简体) ), updateWorkItemStatus, (中文(简体) ), startSearch, (中文(简体) ), saveBookingSelections, (中文(简体) ), holdTrip, (中文(简体) ), confirmTrip, (中文(简体) ), commitChange, (中文(简体) ), tryCancelTripOrBooking,以及 SubmitExpenseReport (使用时 concur_submit_report) (中文(简体) ).

  • 核准 ——批准或退回他人报告(contextRole: MANAGER) (中文(简体) ). 未构建: approvalsportal.asp 页 次 GetApproversList 财务报告和审定财务报表 loadApprovalDetails 读取,和 UpdateTimelineWorkflow 电话 拒绝: CDS processApproval,以及 updateWorkItemStatus (单位:千美元)updateDelegatesDashboardWorkItemStatus) (中文(简体) ). 此服务器只操作您自己的数据 .
  • 卡片交易管理 ——卡片账户页面及其操作: /Expense/Client/cardtransactions.asp, (中文(简体) ), GetCardAccounts, (中文(简体) ), GetCardTransaction, (中文(简体) ), MoveCCTransactionsToReport, (中文(简体) ), CreateCBSReportAndMoveCCTransactionsToReport, (中文(简体) ), RefreshYodleeTransactions. (已作为可用支出出现的信用证费用) 为: 已涵盖——列表,移到报告,删除。 )
  • 预订或取消旅行 - 搜索、价格、帐簿、持有、确认或取消(startSearch, (中文(简体) ), saveBookingSelections, (中文(简体) ), holdTrip, (中文(简体) ), confirmTrip, (中文(简体) ), commitChange, (中文(简体) ), tryCancelTripOrBooking) (中文(简体) ). 除了通过电子邮件发送行程之外,旅行只读.

升级

0.5.0 - (中文(简体) ) concur_get_receipt 内置输出. 返回的非图像收件内置( a PDF) 是一个嵌入式资源, 其 URI 现在 attachment:///receipt-<imageId>.<ext> (这是 concur-receipt:<imageId>) (中文(简体) ). JSON区块也有收益 via (单位:千美元)image, (中文(简体) ), resource, (中文(简体) ), link 或者说 disk),并在主机服务器上 downloadUrl + 键 expiresAt 用于签名链接。 和以前一样的电话 concur-receipt: URI 应改为: via 换句话说.

发展

npm install
npm run build        # tsc → dist/, then esbuild → dist/bundle.js (the .mcpb entry)
npm test             # typecheck + vitest
npm run test:coverage

API的表面是建立在 —— 主机、 认证器、 使用的每个操作, 以及经过验证的活件上 docs/CONCUR-API.md,有逐字记录文本 docs/api/。 。 。 .

许可证

麻省理工学院

版本与发布记录

@chrischall/concur-mcp 共发布 13 个版本,首次发布于 2026/10/09;过去 12 个月发布了 13 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.5.0latest2026/11/072 天前
0.4.12026/11/054 天前
0.4.02026/11/055 天前
0.3.42026/10/2911 天前
0.3.32026/10/2119 天前
0.3.22026/10/1823 天前

关于 @chrischall/concur-mcp 的常见问题

@chrischall/concur-mcp 是什么?

Claude的非官方SAP协议MCP服务器——支出报告、支出、收据和出行——由AI(Claude代码)开发和维护

如何安装 @chrischall/concur-mcp?

在项目目录运行 npm install @chrischall/concur-mcp,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 concur-mcp,可以用 npx concur-mcp 直接运行。

@chrischall/concur-mcp 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/chrischall__concur-mcp 是否存在。

@chrischall/concur-mcp 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@chrischall/concur-mcp 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.5.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@chrischall/concur-mcp 可以商用吗?

@chrischall/concur-mcp 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@chrischall/concur-mcp 的下载量有多少?

根据 npm 官方下载统计,@chrischall/concur-mcp 在 2026/10/10 – 2026/11/08 这 30 天内被下载 2,256 次,日均约 75 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@chrischall/concur-mcp 还在维护吗?

最新版本 0.5.0 发布于 2026/11/07(2 天前);至今共发布 13 个版本,其中过去 12 个月发布了 13 个;首次发布于 2026/10/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。