Box AI元数据提取服务

一个通过Box AI从Box文件中提取结构化与非结构化元数据的MCP服务器,支持JWT认证和文件信息检索。

  • by njread
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 njread/mcp-demo

使用说明

Box AI MCP服务器

一种模型上下文协议(MCP)服务器,使AI助手能够使用Box AI从Box文件中提取元数据。该服务器提供了使用Box进行身份验证、从文档中提取结构化和非结构化元数据以及检索文件信息的工具。

⚠️ 免责声明: 这是一个独立的开源项目,不隶属于、不受Box,股份有限公司认可或与之关联。这是一项有趣的个人项目,旨在进行教育和实验。使用风险自负。

特性

  • 🔐 JWT身份验证 -使用BoxJWT进行安全的服务器到服务器身份验证
  • 🤖 Box AI集成 -利用Box AI从文档中提取元数据
  • 📊 结构化元数据提取 -使用预定义的字段定义或模板提取数据
  • 🎯 自由格式元数据提取 -使用自然语言提示提取任何元数据
  • 📁 文件信息 -获取有关Box文件的详细信息
  • 🔄 许可证管理 -自动跟踪和刷新令牌到期时间

先决条件

  • Node.js 18+(支持ES模块)
  • Box开发者帐户
  • 配置了JWT身份验证的Box应用程序

安装

  1. 克隆或下载此存储库

  2. 安装依赖项:

npm install
  1. 确保您的Box开发人员控制台中有以下内容:
    • 客户端ID
    • 客户端密码(企业ID)
    • 私钥(来自生成的密钥对)
    • 公钥ID(儿童)
    • 主题ID(用户ID或企业ID)

配置

设置Box应用程序

  1. 首选 Box开发人员控制台
  2. 创建新的“自定义应用程序”
  3. 选择“服务器身份验证(使用JWT)”
  4. 生成公钥/私钥对
  5. 下载配置文件(包含您的凭据)
  6. 在您的Box企业中授权应用程序

Claude桌面配置

将服务器添加到Claude Desktop MCP配置文件中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "box-ai-server": {
      "command": "/opt/homebrew/bin/node",
      "args": ["/path/to/MCP_DEMO/mcp.js"],
      "env": {
        "NODE_OPTIONS": "--no-deprecation"
      }
    }
  }
}

窗户: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "box-ai-server": {
      "command": "node",
      "args": ["C:\\path\\to\\MCP_DEMO\\mcp.js"]
    }
  }
}

更新配置后,重新启动Claude Desktop。

用法

认证

在使用任何Box API工具之前,您需要使用 box_authenticate 工具:

所需参数:

  • clientId -您的Box应用程序客户端ID
  • clientSecret -您的Box应用程序客户端机密(企业ID)
  • privateKey -PEM格式的私钥(来自Box Developer Console)
  • publicKeyId -Box开发者控制台中的公钥ID(kid)
  • subjectType -要么 "user" 或 "enterprise"
  • subjectId -要验证的用户ID或企业ID

例子:

Authenticate with Box API using:
- Client ID: abc123...
- Client Secret: xyz789...
- Private Key: -----BEGIN RSA PRIVATE KEY-----...
- Public Key ID: abc123def456
- Subject Type: enterprise
- Subject ID: 12345678

备选方案:环境变量

您还可以直接通过环境变量设置Box访问令牌:

export BOX_ACCESS_TOKEN="your-access-token-here"

可用工具

1. box_authenticate

使用JWT身份验证使用Box API进行身份验证。将访问令牌存储在内存中,供其他工具使用。

参数:

  • clientId (string)-Box应用程序客户端ID
  • clientSecret (string)-Box应用程序客户端机密
  • privateKey (string)-PEM格式的私钥
  • publicKeyId (string)-公钥ID
  • subjectType (“用户”|“企业”)-主体类型
  • subjectId (string)-用户ID或企业ID

2. box_set_access_token

如果您已经有来自其他来源的Box访问令牌,请手动设置一个Box访问令牌。

参数:

  • accessToken (string)-盒子访问令牌
  • expiresIn (数字,可选)-令牌过期时间(秒)

3. box_get_auth_status

检查当前身份验证状态和令牌信息。

参数: 无

4. box_extract_metadata

使用带有自然语言提示的Box AI从Box文件中提取元数据(自由提取)。

参数:

  • fileId (string)-Box文件ID
  • prompt (string)-描述提取内容的自然语言提示
  • format (“json”|“xml”|“text”,可选)-输出格式(默认:“json”)

例子:

Extract metadata from file "123456789" with prompt:
"Extract the invoice number, date, total amount, and vendor name"

5. box_extract_structured_metadata

使用预定义的字段定义或元数据模板提取结构化元数据。

参数:

  • fileId (string)-Box文件ID
  • fields (array,可选)-字段定义数组:
    • name (string)-字段名称
    • description (string)-提取内容的描述
    • type (“string”|“number”|“date”|“boolean”,可选)-数据类型
  • templateId (字符串,可选)-元数据模板ID(如果使用模板)

例子:

{
  "fileId": "123456789",
  "fields": [
    {
      "name": "invoiceNumber",
      "description": "The invoice number",
      "type": "string"
    },
    {
      "name": "totalAmount",
      "description": "The total amount due",
      "type": "number"
    }
  ]
}

6. box_get_file_info

获取有关Box文件的基本信息,包括名称、大小、类型和元数据。

参数:

  • fileId (string)-Box文件ID

例子

示例1:提取发票元数据

1. Authenticate with Box API
2. Use box_extract_metadata with:
   - File ID: 123456789
   - Prompt: "Extract invoice number, date, vendor, line items with descriptions and amounts, and total"
   - Format: json

示例2:提取结构化合同数据

1. Authenticate with Box API
2. Use box_extract_structured_metadata with:
   - File ID: 987654321
   - Fields:
     - name: "contractDate", description: "Contract execution date", type: "date"
     - name: "parties", description: "Names of all parties to the contract", type: "string"
     - name: "expirationDate", description: "Contract expiration date", type: "date"
     - name: "isActive", description: "Whether the contract is currently active", type: "boolean"

示例3:获取文件信息

1. Authenticate with Box API
2. Use box_get_file_info with File ID: 123456789

故障排除

服务器未显示工具

  • 确保 inputSchema 格式与预期格式匹配(纯对象,不是 z.object())
  • 检查Node.js版本是否为18+
  • 验证Claude Desktop配置中的文件路径是否正确
  • 配置更改后重新启动Claude Desktop

身份验证错误

  • 验证您的私钥是否采用正确的PEM格式(包括 -----BEGIN 和 -----END 线路)
  • 确保您的Box应用程序在您的企业中获得授权
  • 检查主题ID是否与有效的用户或企业ID匹配
  • 验证公钥ID(kid)是否与Box Developer Console中的ID匹配

令牌到期

  • 代币会被自动跟踪,并在其生命周期结束后过期
  • 使用 box_get_auth_status 检查令牌过期
  • 使用重新验证 box_authenticate 令牌到期时

API错误

  • 确保您在Box中对正在访问的文件具有适当的权限
  • 验证文件ID是否正确
  • 检查您的Box帐户是否启用了Box AI功能

项目结构

MCP_DEMO/
├── mcp.js              # Main MCP server implementation
├── package.json        # Dependencies and scripts
├── package-lock.json   # Locked dependency versions
└── README.md          # This file

依赖项

  • @modelcontextprotocol/sdk (^1.16)-用于服务器实现的MCP SDK
  • zod (^3.25.76)-工具输入的模式验证
  • 内置Node.js crypto -JWT签名

许可证

国际协调委员会

贡献

这是一个个人项目,但请随意分叉和修改以供自己使用!

致谢


注: 本项目不隶属于Box,股份有限公司Box,Box AI,相关商标为其各自所有者的财产。