ProcurementExpress MCP服务器
A. 模型上下文协议(MCP) 为LLM提供访问权限的服务器 采购快递 API通过自然语言管理采购订单、发票、预算、供应商和采购工作流程。
特性
- 100+工具 覆盖整个ProcurementExpress API表面
- 双API版本支持 --V1(基于令牌)和V3(OAuth2)身份验证
- 版本无关的工具层 -所有工具在API版本中的工作方式相同
- 类型安全 -适用于所有API实体的全面TypeScript接口
- 文件上传 --支持PO、注释和数字发票的多部分文件上传
- 政府采购 --SAM.gov检查、政策、供应商批准
- 零外部运行时依赖关系 --只有
@modelcontextprotocol/sdk 和 zod
快速开始
先决条件
- Node.js 18+
- 具有API访问权限的ProcurementExpress帐户
安装
无需安装--直接使用运行 npx:
npx -y @procurementexpress.com/mcp
使用Claude Desktop
将此添加到您的Claude Desktop配置中(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"procurementexpress": {
"command": "npx",
"args": ["-y", "@procurementexpress.com/mcp"],
"env": {
"PROCUREMENTEXPRESS_API_VERSION": "v1",
"PROCUREMENTEXPRESS_AUTH_TOKEN": "your_token",
"PROCUREMENTEXPRESS_COMPANY_ID": "your_company_id"
}
}
}
}
使用Claude代码
添加到您的项目 .mcp.json:
{
"mcpServers": {
"procurementexpress": {
"command": "npx",
"args": ["-y", "@procurementexpress.com/mcp"],
"env": {
"PROCUREMENTEXPRESS_API_VERSION": "v1",
"PROCUREMENTEXPRESS_AUTH_TOKEN": "your_token",
"PROCUREMENTEXPRESS_COMPANY_ID": "your_company_id"
}
}
}
}
配置
服务器完全通过环境变量配置(在 env 块上面)。
V1身份验证(推荐)
静态令牌身份验证。令牌永远不会过期。
| 变量 | 值 |
|---|
PROCUREMENTEXPRESS_API_VERSION | v1 |
PROCUREMENTEXPRESS_AUTH_TOKEN | 您的身份验证令牌 |
PROCUREMENTEXPRESS_COMPANY_ID | 您的公司ID |
V3身份验证(OAuth2)
OAuth2密码授予。代币有时间限制,需要 client_id/client_secret.
| 变量 | 值 |
|---|
PROCUREMENTEXPRESS_API_VERSION | v3 |
PROCUREMENTEXPRESS_CLIENT_ID | 您的OAuth2客户端ID |
PROCUREMENTEXPRESS_CLIENT_SECRET | 您的OAuth2客户端机密 |
认证
服务器支持两种身份验证模式,由 PROCUREMENTEXPRESS_API_VERSION 环境变量。
V1——基于令牌(默认)
集 PROCUREMENTEXPRESS_API_VERSION=v1。通过环境变量提供您的静态令牌和公司ID,或将它们传递给 authenticate 工具在运行时。
- 发送
authentication_token 和 app_company_id 每个请求上的标头 - 令牌永不过期——无需刷新逻辑
- 环境变量:
PROCUREMENTEXPRESS_AUTH_TOKEN, PROCUREMENTEXPRESS_COMPANY_ID
V3--OAuth2
集 PROCUREMENTEXPRESS_API_VERSION=v3。需要 PROCUREMENTEXPRESS_CLIENT_ID 和 PROCUREMENTEXPRESS_CLIENT_SECRET 环境变量。打电话给 authenticate 使用电子邮件/密码获取Bearer令牌的工具。
- 发送
Authorization: Bearer 每个请求的标题 - 令牌有刷新支持的时间限制
- 验证后,使用
set_active_company 选择一家公司
可用工具
身份验证(3个工具)
| 工具 | 说明 |
|---|
authenticate | V1:设置令牌+公司ID。V3:使用电子邮件/密码登录OAuth2 |
validate_token | V1:获取当前用户以验证令牌。V3:获取令牌元数据 |
revoke_token | V1:清除本地令牌。V3:撤销OAuth2令牌 |
用户(4个工具)
| 工具 | 说明 |
|---|
get_current_user | 获取经过身份验证的用户的个人资料和公司成员资格 |
update_current_user | 更新个人资料(电子邮件、姓名、电话、密码) |
list_currencies | 列出当前公司启用的货币 |
list_all_currencies | 列出全球所有可用货币 |
公司(12种工具)
| 工具 | 说明 |
|---|
list_companies | 列出当前用户所属的所有公司 |
get_company | 按ID获取公司详细信息,包括设置和货币 |
get_company_details | 获取当前活跃公司的详细信息 |
set_active_company | 为后续API调用设置活动公司ID |
list_approvers | 列出按部门筛选的审批人 |
list_all_approvers | 列出所有审批人,无论其路线如何 |
list_employees | 列出所有具有角色的在职员工 |
invite_user | 邀请用户(角色:公司管理员、审批人、财务、团队成员) |
get_invite_limit | 获取公司的剩余邀请时段 |
list_pending_invites | 列出待处理的用户邀请 |
cancel_invite | 取消挂起的用户邀请 |
resend_invite | 重新发送待处理的用户邀请电子邮件 |
预算(4种工具)
| 工具 | 说明 |
|---|
list_budgets | 按页码列出预算,按部门/已存档/活动进行筛选 |
get_budget | 获取预算详细信息,包括剩余金额 |
create_budget | 创建新预算 |
update_budget | 更新现有预算 |
部门(4个工具)
| 工具 | 说明 |
|---|
list_departments | 列出具有可选存档过滤器的部门 |
get_department | 找一个特定的部门 |
create_department | 创建新部门 |
update_department | 更新部门 |
供应商(7种工具)
| 工具 | 说明 |
|---|
list_suppliers | 使用分页和过滤器列出供应商 |
get_top_suppliers | 通过支出获得顶级供应商 |
get_supplier | 找到一个特定的供应商 |
create_supplier | 创建供应商(名称必须唯一) |
update_supplier | 更新供应商 |
check_sam_gov | 根据SAM.gov数据库检查供应商 |
list_supplier_approvals | 列出待处理的供应商审批请求 |
产品(6工具)
| 工具 | 说明 |
|---|
list_products | 列出带有供应商/存档过滤器的产品 |
get_product | 获取特定产品 |
create_product | 创建新产品 |
update_product | 更新产品 |
bulk_create_products | 在一次通话中批量创建多个产品 |
list_product_skus | 列出所有产品SKU |
采购订单(19个工具)
| 工具 | 说明 |
|---|
list_purchase_orders | 列出具有分页、搜索和过滤器的PO |
get_purchase_order | 获取订单详细信息,包括行项目、评论、批准 |
create_purchase_order | 创建采购订单(提交=“发送”以提交,“草稿”以保存) |
update_purchase_order | 更新现有采购订单 |
approve_purchase_order | 使用审批者请求中的接受令牌进行审批 |
reject_purchase_order | 使用审批者请求中的拒绝令牌拒绝 |
override_and_approve_purchase_order | 财务优先审批(无需令牌) |
cancel_purchase_order | 取消采购订单 |
archive_purchase_order | 切换采购订单的存档状态 |
delete_purchase_order | 永久删除采购订单 |
generate_purchase_order_pdf | 生成PDF并返回下载链接 |
get_pending_request_count | 获取待处理审批请求的计数 |
receive_purchase_order_items | 将行项目标记为已收到(部分或全部交付) |
cancel_receiving_items | 取消订单的所有已收货 |
complete_purchase_order_delivery | 将订单标记为已完全交付 |
bulk_save_purchase_orders | 批量创建/更新多个PO |
get_po_auto_approvers | 获取采购订单的自动分配审批人 |
get_po_available_approvers | 预览采购订单的可用审批人 |
get_po_approval_flow_link | 获取审批流链接以与供应商共享 |
发票(13个工具)
| 工具 | 说明 |
|---|
list_invoices | 列出带有分页和过滤器的发票 |
get_invoice | 获取发票详细信息 |
create_invoice | 创建新发票 |
update_invoice | 更新现有发票 |
accept_invoice | 接受等待审核的发票 |
approve_invoice | 批准发票 |
reject_invoice | 拒绝发票 |
cancel_invoice | 取消发票 |
archive_invoice | 将发票存档 |
dearchive_invoice | 恢复已存档的发票 |
rerun_invoice_approval_flow | 重新运行特定发票的审批流 |
list_invoice_purchase_orders | 列出可链接到发票的PO |
list_invoice_purchase_order_items | 列出可链接到发票的采购订单项目 |
自定义字段(6个工具)
| 工具 | 说明 |
|---|
list_custom_fields | 列出公司的所有自定义字段 |
get_custom_field | 按ID获取自定义字段 |
create_custom_field | 创建自定义字段(文本、下拉列表、日期、数字等) |
update_custom_field | 更新现有自定义字段 |
delete_custom_field | 删除(存档)自定义字段 |
update_custom_field_positions | 重新排序自定义字段 |
合规性(10个工具)
| 工具 | 说明 |
|---|
check_compliance | 对采购订单或发票触发合规性检查(异步) |
bulk_check_compliance | 触发对多个PO的批量合规性检查 |
get_bulk_check_status | 获取批量合规性检查的状态 |
justify_compliance_violation | 为特定的合规违规行为辩护 |
generate_compliance_memo | 生成AI合规备忘录 |
list_compliance_scan_history | 列出合规性扫描历史记录 |
get_compliance_scan_details | 获取特定合规性扫描的详细信息 |
create_evidence_pack | 为合规性检查创建证据包 |
get_evidence_pack | 按ID获取证据包 |
download_evidence_pack | 下载证据包ZIP文件 |
上传(3个工具)
| 工具 | 说明 |
|---|
upload_file_to_purchase_order | 将文件附件上传到采购订单(多部分) |
upload_file_to_comment | 将文件上传到注释(多部分) |
get_upload_status | 通过令牌检查上传状态 |
政策(6个工具)
| 工具 | 说明 |
|---|
list_policies | 列出带筛选器的公司政策 |
get_policy | 通过ID和版本历史获取策略 |
create_policy | 制定新的公司政策 |
update_policy | 更新现有策略 |
delete_policy | 删除(软删除)策略 |
list_policy_templates | 列出可用策略模板 |
聊天信息(3个工具,仅限V3)
| 工具 | 说明 |
|---|
list_chat_messages | 列出文档的聊天消息 |
create_chat_message | 在采购订单/发票上创建聊天消息 |
delete_chat_message | 删除聊天消息 |
数字发票(1个工具)
| 工具 | 说明 |
|---|
create_digital_invoice | 根据扫描的文档上传创建发票 |
审批流程(13个工具)
| 工具 | 说明 |
|---|
list_approval_flows | 列出具有搜索和分页功能的审批流 |
get_approval_flow | 获取流程详细信息,包括步骤、审批人、条件 |
create_approval_flow | 创建流程(文档类型:0=采购订单,1=发票) |
update_approval_flow | 更新现有审批流 |
delete_approval_flow | 永久删除审批流 |
archive_approval_flow | 存档审批流(软删除) |
publish_approval_flow | 发布审批流以使其处于活动状态 |
unpublish_approval_flow | 取消发布审批流以将其停用 |
list_approval_flow_runs | 使用状态和日期筛选器运行列表 |
get_approval_flow_entity | 获取通过流的实体的详细信息 |
list_approval_flow_versions | 列出审批流的所有版本历史记录 |
get_approval_flow_version_details | 获取特定版本的完整详细信息 |
rerun_approval_flows | 重新运行特定PO和/或发票的审批流 |
付款(3种工具)
| 工具 | 说明 |
|---|
get_payment | 通过ID获得特定付款 |
create_payment | 创建付款(类型:银行转账、卡、支票、现金等) |
create_po_payment | 为采购订单创建项目级付款 |
税率(4个工具)
| 工具 | 说明 |
|---|
list_tax_rates | 列出所有税率(单一和组合) |
get_tax_rate | 获取特定税率 |
create_tax_rate | 创建新的税率 |
update_tax_rate | 更新税率 |
Webhooks(5个工具)
| 工具 | 说明 |
|---|
list_webhooks | 列出带有可选存档过滤器的Webhook |
get_webhook | 获取特定的webhook |
create_webhook | 创建一个webhook(事件:new_po、po_approved、po_deliver、po_paid、po_canceled、po_update) |
update_webhook | 更新webhook |
delete_webhook | 删除webhook |
评论(2个工具)
| 工具 | 说明 |
|---|
add_purchase_order_comment | 向采购订单添加注释 |
add_invoice_comment | 在发票上添加注释 |
补充(8个工具)
| 工具 | 说明 |
|---|
list_chart_of_accounts | 带搜索的科目表(总账代码)列表 |
get_chart_of_account | 获取特定的会计科目表 |
list_qbo_customers | 通过搜索列出QuickBooks客户 |
get_qbo_customer | 获取特定的QuickBooks客户 |
list_qbo_classes | 列出带搜索的QuickBooks类 |
get_qbo_class | 获取特定的QuickBooks类 |
list_send_to_supplier_templates | 列出用于发送PO的电子邮件模板 |
forward_purchase_order | 通过电子邮件向供应商发送采购订单 |
AI代理技能
服务器附带10个特定模块 Claude代码技能 在 .claude/skills/ 它将AI代理路由到正确的MCP工具调用,而无需读取整个源文件。技能使用 pex: 命名空间:
| 技能 | 工具 | 描述 |
|---|
pex:auth | 5 | 身份验证(V1/V3)、令牌管理、用户配置文件 |
pex:companies | 12 | 公司详细信息、员工、邀请函、审批人 |
pex:budgets | 4 | 支持自定义字段的预算CRUD |
pex:departments | 4 | 原油部门 |
pex:suppliers | 9 | 供应商和产品管理 |
pex:purchase-orders | 18 | PO生命周期、交付、PDF、转发、评论 |
pex:invoices | 12 | 发票生命周期、审批、评论 |
pex:payments | 3 | 付款创建和检索 |
pex:approval-flows | 13 | 审批流配置、运行、版本 |
pex:settings | 17 | 税率、挂钩、货币、会计科目表、QBO |
复杂模式的技能包括 references/ 用于逐步披露的子目录(例如,行项目模式、审批条件、工作流)。
在项目中安装技能
要在您自己的项目中与MCP服务器一起使用这些技能,请复制 .claude/skills/pex-* 项目中的目录:
# From your project root
mkdir -p .claude/skills
# Copy all PEX skills from the package
cp -r node_modules/@procurementexpress.com/mcp/.claude/skills/pex-* .claude/skills/
或者只挑选你需要的技能:
# Example: only purchase orders and invoices
cp -r node_modules/@procurementexpress.com/mcp/.claude/skills/pex-purchase-orders .claude/skills/
cp -r node_modules/@procurementexpress.com/mcp/.claude/skills/pex-invoices .claude/skills/
一旦安装,Claude Code将自动发现技能并使用它们来路由到正确的MCP工具调用(例如。, /pex:purchase-orders, /pex:invoices).
项目结构
src/
index.ts # Entry point — MCP server setup, auth tools, tool registration
api-client.ts # HTTP client with versioned path building, auth headers, multipart support
auth.ts # Dual auth manager (V1 token / V3 OAuth2)
tool-helpers.ts # Shared response helpers and error handling wrapper
types.ts # TypeScript interfaces for all API entities
schemas.ts # Shared Zod schemas (custom field values, line items, nested attributes)
tools/
approval-flows.ts # Approval flow CRUD, publish/unpublish, runs, versions, rerun
budgets.ts # Budget CRUD
chat-messages.ts # Chat messages (V3 only) — list, create, delete
comments.ts # PO and invoice comments
companies.ts # Company details, employees, approvers, invitations, pending invites
compliance.ts # Compliance checks, bulk checks, justifications, memos, evidence packs
custom-fields.ts # Custom field CRUD + position reordering
departments.ts # Department CRUD
digital-invoices.ts # Digital invoice creation from scanned documents
invoices.ts # Invoice CRUD, approve/reject/cancel/archive, rerun approval, PO linking
payments.ts # Payment creation (standalone, PO-linked, NPayment) and get
policies.ts # Policy CRUD + policy templates
products.ts # Product CRUD + bulk create + SKU listing
purchase-orders.ts # PO CRUD, approve/reject/cancel/archive/delete, delivery, PDF, bulk save
supplementary.ts # Chart of accounts, QBO integration, email forwarding
suppliers.ts # Supplier CRUD + top suppliers + SAM.gov check + supplier approvals
tax-rates.ts # Tax rate CRUD
uploads.ts # File uploads (PO attachments, comment files, upload status)
users.ts # Current user profile and currency listing
webhooks.ts # Webhook CRUD + delete
tests/
e2e/
setup.ts # MockApiServer with version-agnostic route registration
*.test.ts # E2E tests for each tool group (211 tests)
发展
对于希望在服务器上工作的贡献者:
git clone https://github.com/przbadu/procurementexpress-mcp.git
cd procurementexpress-mcp
npm install
构建
npm run build # Compile TypeScript to dist/
npm run dev # Watch mode for development
测试
npm test # Run all tests
npm run test:e2e # Run E2E tests only
npx vitest run tests/e2e/auth.test.ts # Run a single test file
npm run test:watch # Watch mode
测试使用a MockApiServer -模拟ProcurementExpress API的轻量级HTTP服务器。模拟路由使用与版本无关的正则表达式模式(/api/v[13]/)因此测试适用于V1和V3配置。
添加新工具
- 添加TypeScript接口
src/types.ts 如有需要 - 在中创建或编辑文件
src/tools/ 遵循现有模式:
import { z } from "zod";
import type { ApiClient } from "../api-client.js";
import type { Server } from "../tool-helpers.js";
import { jsonResponse, withErrorHandling } from "../tool-helpers.js";
export function registerMyTools(server: Server, apiClient: ApiClient): void {
server.registerTool(
"my_tool_name",
{
description: "What this tool does",
inputSchema: {
id: z.number().int().positive().describe("Resource ID"),
},
},
withErrorHandling(async (args) => {
const result = await apiClient.get(apiClient.buildPath(`/my_resource/${args.id}`));
return jsonResponse(result);
}),
);
}
- 在中注册工具组
src/index.ts:
import { registerMyTools } from "./tools/my-tools.js";
registerMyTools(server, apiClient);
- 在中添加模拟路线和测试
tests/e2e/
主要惯例:
- 总是使用
apiClient.buildPath("/resource") --从不硬编码 /api/v1/ 或 /api/v3/ - 用
withErrorHandling() - 使用
jsonResponse() 数据和 textResponse() 用于消息 - 所有进口必须使用
.js 扩展(ES模块)
发布新版本
要将新版本发布到npm:
- 确保你的工作树干净,所有测试都通过:
npm test
- 修改版本,创建一个git标签,然后发布:
# Choose one: patch (bug fixes), minor (new features), major (breaking changes)
npm version patch -m "v%s" # or minor / major
# Push the commit and tag
git push && git push --tags
# Publish to npm (auto-builds via prepublishOnly)
npm publish
- 验证发布的版本:
npm view @procurementexpress.com/mcp version
该包发布为 @procurementexpress.com/mcp 在npm上。
环境变量引用
| 变量 | 必填 | 默认 | 描述 |
|---|
PROCUREMENTEXPRESS_API_BASE_URL | 没有 | https://app.procurementexpress.com | API基本URL |
PROCUREMENTEXPRESS_API_VERSION | 没有 | v1 | API版本(v1 或 v3) |
PROCUREMENTEXPRESS_COMPANY_ID | V1 | -- | V1身份验证的公司ID |
PROCUREMENTEXPRESS_AUTH_TOKEN | V1 | -- | V1的静态身份验证令牌 |
PROCUREMENTEXPRESS_CLIENT_ID | V3 | -- | V3的OAuth2客户端ID |
PROCUREMENTEXPRESS_CLIENT_SECRET | V3 | -- | V3的OAuth2客户端机密 |
许可证
ISC